Android 每当我离开活动时,无法删除处理程序,当我回来时,它们将继续运行
我有以下处理程序:Android 每当我离开活动时,无法删除处理程序,当我回来时,它们将继续运行,android,multithreading,handler,Android,Multithreading,Handler,我有以下处理程序: public static final int WORK = 2; public static final int UPDATE = 1;` private Handler uiHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case UPDATE:
public static final int WORK = 2;
public static final int UPDATE = 1;`
private Handler uiHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
switch (msg.what)
{
case UPDATE:
// Perform UI updates here
this.sendMessageDelayed(this.obtainMessage(WORK), 15000);
break;
case WORK:
{
new Thread(doWork).start();
}
break;
default:
super.handleMessage(msg);
}
}
};
这非常好用。
然而,我面临的不利因素如下
假设我在恢复以下uiHandler.sendMessageDelayeduiHandler.GetainMessageWork时在内部运行,500
现在处理程序将完美运行,比如说在9:00:10,并将触发运行线程
但是,每当我离开活动,转到另一个活动,然后快速返回时,处理程序的另一个计时器就会启动。
假设我9:00:13从其他活动回来
我将在9:00:15和9:00:28运行两个线程
如果我来来回回,会有更多
在我的暂停中,我调用uiHandler.removeMessagesWORK;但是它没有任何帮助。如果您想让它运行一次,为什么不将其设置为onCreate?或者,如果您希望它在恢复时运行,但仅限于某些情况,您可以使用一个标志。@Chrys,我希望它在我从暂停返回时再次运行。handler.removeCallbacksandMessagesAll;<我用了这个,它似乎起了作用。不过我并没有对它进行严格的测试。如果有人能证实,我会认为这是一个解决办法。啊,我明白了。这会停止任何已经启动的线程吗?如果没有,您可能可以在onPause.uiHandler.removeMessagesWORK上检查并手动停止它们;不应该工作,因为它只从消息队列中删除消息。如果消息正在执行,它将不会执行任何操作。为什么不使用AsyncTask来执行线程工作?它应该会起作用。在postExecute方法中,可以停止后台工作。