我有Handler。我每隔10秒调用一次我的函数。编码工作完美,但我无法停止处理程序。这是我的源代码
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秒调用一次myfunction,但我无法停止处理。我可以解决我的问题吗?
答案 0 :(得分:0)
你删除了myFunction中的回调,但是当myFunction返回时你再次postDelayed,只是在run()中反转行
@Override
public void run() {
handler.postDelayed(runnable,10000);
myFunction(position);
}
答案 1 :(得分:0)
问题是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;
}
您不必删除处理程序上的回调,因为首先不会安排新的回调。