2

我正在尝试停止 Timer 或 TimerTask,但该方法不会破坏任务......

首先是我如何设置timertask的代码:

 scanTask = new TimerTask() {
    public void run() {
            handler.post(new Runnable() {
                    public void run() {
                     load_unread();
                     Log.d("TIMER", "Timer set off");
                    }
           });
    }};

t=新计时器();t.schedule(scanTask, 300, 10000);

现在我正试图在 onDestroy 上“杀死”这个任务:

@Override
protected void onDestroy() {
    super.onDestroy();
    scanTask.cancel();
    t.cancel();
    t.purge();
    handler.removeCallbacksAndMessages(null);
    System.out.println("Chat destroyed");
}

但这不起作用?你能帮我找到解决办法吗?

谢谢!

编辑:我终于找到了答案。不知道为什么我的没有工作...

这里是每个有相同问题的人的代码。无论如何,我认为这是一个更好,更有效的解决方案:

private Handler handler = new Handler(); runnable.run();

private Runnable runnable = new Runnable() 
{

    public void run() 
    {
         //
         // Do the stuff
         //

         handler.postDelayed(this, 1000);
    }
};

并停止:

handler.removeCallbacks(runnable);

取自这里:

https://stackoverflow.com/a/11640073/1956197

4

3 回答 3

2

查看您的编辑后,我建议的唯一方法是使用handler.post(runnable);这种runnable.run();方式,您始终在单独的线程上执行您的可运行文件。否则,您的第一次执行将在主线程上运行,然后未来的执行将在单独线程上的处理程序内运行。

    final Handler handler = new Handler();

    Runnable runnable = new Runnable() {

        public void run() {
            //
            // Do the stuff
            //

            handler.postDelayed(this, 1000);
        }
    };

    handler.post(runnable);
于 2013-02-05T17:45:30.607 回答
0

在将 TimerTask 设置为空之前取消它。

scanTask.cancel();
于 2013-02-04T18:38:25.687 回答
0

这个例子启动定时器 unitl 被销毁

 private lateinit var timerTask: TimerTask

 timerTask = object : TimerTask() {
        override fun run() {
            Log.d("KTZ", "$minutes:$seconds");
            timeRecordingLiveData.postValue("$minutes:$seconds")
            seconds += 1;
            if (seconds == 60) {
                Log.d("KTZ", "$minutes:$seconds");
                timeRecordingLiveData.postValue("$minutes:$seconds")
                seconds = 0;
                minutes += 1;
            }
        }

    }

在 onDestroy() 中取消 timertask

    timerTask.cancel()
于 2020-06-19T12:25:32.847 回答