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方法中,可以停止后台工作。