删除回调在 Handler 中不起作用
Remove callback not working in Handler
我 Handler.I 每 10 次调用我的函数 second.Code 工作完美,但我无法停止 handler.This 是我的源代码
handler=new Handler();
handler.post(runnable);
public Runnable runnable = new Runnable() {
@Override
public void run() {
myFunction(position);
handler.postDelayed(runnable,10000);
}
};
public void myFunction(int position)
{
if(position>10)
handler.removeCallbacks(runnable);
}
我可以每 10 秒调用一次函数,但我无法停止handler.Ho我能解决我的问题吗?
您删除了 myFunction 中的回调,但是当 myFunction returns 时您再次 postDelayed,只是反转 运行()
中的行
@Override
public void run() {
handler.postDelayed(runnable,10000);
myFunction(position);
}
问题是myFunction
去掉了回调,然后你还是调用handler.postDelayed
安排新的回调。有很多方法可以重构它。例如:
handler=new Handler();
handler.post(runnable);
public Runnable runnable = new Runnable() {
@Override
public void run() {
boolean reschedule = myFunction(position);
if(reschedule) {
handler.postDelayed(runnable,10000);
}
}
};
public boolean myFunction(int position)
{
if(position>10) {
return false;
}
return true;
}
您不必删除处理程序上的回调,因为不会首先安排新回调。
我 Handler.I 每 10 次调用我的函数 second.Code 工作完美,但我无法停止 handler.This 是我的源代码
handler=new Handler();
handler.post(runnable);
public Runnable runnable = new Runnable() {
@Override
public void run() {
myFunction(position);
handler.postDelayed(runnable,10000);
}
};
public void myFunction(int position)
{
if(position>10)
handler.removeCallbacks(runnable);
}
我可以每 10 秒调用一次函数,但我无法停止handler.Ho我能解决我的问题吗?
您删除了 myFunction 中的回调,但是当 myFunction returns 时您再次 postDelayed,只是反转 运行()
中的行@Override
public void run() {
handler.postDelayed(runnable,10000);
myFunction(position);
}
问题是myFunction
去掉了回调,然后你还是调用handler.postDelayed
安排新的回调。有很多方法可以重构它。例如:
handler=new Handler();
handler.post(runnable);
public Runnable runnable = new Runnable() {
@Override
public void run() {
boolean reschedule = myFunction(position);
if(reschedule) {
handler.postDelayed(runnable,10000);
}
}
};
public boolean myFunction(int position)
{
if(position>10) {
return false;
}
return true;
}
您不必删除处理程序上的回调,因为不会首先安排新回调。