我创建了一个处理程序,模仿计时器任务。
因为TimerTask在不同的平板电脑上表现不同。
所以我创建了这个处理程序方法
在计时器中有一个方法timerTask.cancel();
但是如何阻止这个处理程序
即使在退出应用程序后它也会继续运行。
因为你可以看到即使在背压后也能运行日志。
Handler handler = new Handler();
public void recursivelycallHandler(){
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.d("handler is running", "true" + System.currentTimeMillis());
recursivelycallHandler();
}
}, 100);
}
答案 0 :(得分:2)
有3种方法可以做到这一点..
handler.removeCallbacks(Runnable r);
handler.removeCallbacksAndMessages(null);
handler.removeMessages(int what)
在你的情况下,前两个似乎是可行的..在ondestroy或者一个监听器上添加任何上述方法来进行反击..
答案 1 :(得分:0)
你可以存储flag(boolean var)来检测你是否需要调用你的处理程序,并在退出应用程序之前将此标志更改为false并停止调用处理程序。
答案 2 :(得分:0)
你可以在下面做这样的事情:
public void recursivelycallHandler(){
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.d("handler is running", "true" + System.currentTimeMillis());
if(YOUR_CONDITION){
recursivelycallHandler();
}
}
}, 100);
}
希望你明白我的意思。
随时发表评论。
答案 3 :(得分:0)
只需将isFinished添加到您的run方法:
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (isFinished())
return;
Log.d("handler is running", "true" + System.currentTimeMillis());
recursivelycallHandler();
}
}, 100);
答案 4 :(得分:0)
通过提出任何条件
Handler handler = new Handler();
int i = 0;
Runnable myRunnable = new Runnable() {
@Override
public void run() {
Log.d("handler is running", "true" + System.currentTimeMillis());
if(i>5)
handler.removeCallback(myRunnable);
else{
i++;
handler.postDelayed(myRunnable, 100); // here is self calling
}
}
};
}
handler.postDelayed(myRunnable, 100);
它的递归方法,但是您可以在run()中调用相同的Runnable对象而不是递归方法,并在基于特定情况/条件时删除该对象