3

我创建了一个处理程序,以模仿计时器任务。因为 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);
}
4

5 回答 5

3

有3种方法可以做到这一点..

handler.removeCallbacks(Runnable r);
handler.removeCallbacksAndMessages(null);
handler.removeMessages(int what)

在您的情况下,前两个似乎是可行的..在 ondestroy 或侦听器中添加上述任何方法以进行回压..

于 2013-01-24T13:19:14.487 回答
1

通过设置任何条件

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 对象而不是递归方法,并在基于特定情况/条件时删除该对象

于 2013-01-24T13:20:35.023 回答
0

您可以存储标志(布尔变量)来检测您是否需要调用您的处理程序,并在退出应用程序之前将此标志更改为 false 并停止调用处理程序。

于 2013-01-24T13:18:40.430 回答
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);
}

希望你明白我的意思。

随时发表评论。

于 2013-01-24T13:19:52.653 回答
0

只需将 isFinished 添加到您的运行方法中:

    handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        if (isFinished())
               return;
        Log.d("handler is running", "true" + System.currentTimeMillis());
        recursivelycallHandler();

    }
}, 100);
于 2013-01-24T13:20:19.150 回答