gpt4 book ai didi

android - 我怎样才能停止 TimerTask 处理程序?

转载 作者:行者123 更新时间:2023-11-30 03:47:43 30 4
gpt4 key购买 nike

我正在尝试停止 Timer 或 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(扫描任务, 300, 10000);

现在我正试图在 onDestroy 处“终止”这个任务:

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

但这行不通?你能帮我找到解决方案吗?

谢谢!

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

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


私有(private)处理程序处理程序=新处理程序();
runnable.run();



private Runnable runnable = new Runnable()
{

公共(public)无效运行()
{
//
//做事
//

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

并停止:



handler.removeCallbacks(runnable);

取自这里:

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

最佳答案

在查看您的编辑后,我唯一建议的是使用 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);

关于android - 我怎样才能停止 TimerTask 处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14692927/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com