删除处理程序无法正常工作的回调

时间:2012-08-16 06:38:55

标签: android handler

我编写了一个处理程序,每隔一段时间调用一次该方法。我想在destroy()中删除该处理程序。我使用的代码如下,In Oncreate()

private final Handler _handler = new Handler();
public int DATA_INTERVAL = 30 * 1000;
Runnable getData;
 getData = new Runnable()
        {
            @Override
            public void run()
            {
                     recieveData();
            }
        };

 _handler.postDelayed(getData, DATA_INTERVAL);

并且在ondestroy()中,我使用

_handler.removeCallbacks(getData);

但removecallbacks不起作用。它在退出活动后调用。

3 个答案:

答案 0 :(得分:9)

removeCallbacks(Runnable r)

  

删除邮件队列中的Runnable r的所有待处理帖子。

所以removeCallbacks(..)只停止当前没有运行runnable的待处理消息(Runnables),所以如果你想停止当前运行的Runable,那么当用户从你的应用程序退出时,对Stoping Thread使用布尔变量。

请参阅removeCallbacks not stopping runnable

的这篇文章

答案 1 :(得分:0)

您没有显示代码中最重要的部分receiveData方法。正如您所说,您定期运行任务,您必须从该方法内再次调用postDelayed来重新安排任务。可能涉及后台线程,因为您无法在主线程上进行网络连接。

退出活动时,您很可能遇到竞争条件。 onDestroy先运行,然后再次发布任务。

答案 2 :(得分:0)

您应该使用

handler.removeCallbacksAndMessages(null);

然后所有处理程序回调将被删除。