我编写了一个处理程序,每隔一段时间调用一次该方法。我想在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不起作用。它在退出活动后调用。
答案 0 :(得分:9)
删除邮件队列中的Runnable r的所有待处理帖子。
所以removeCallbacks(..)
只停止当前没有运行runnable的待处理消息(Runnables),所以如果你想停止当前运行的Runable,那么当用户从你的应用程序退出时,对Stoping Thread使用布尔变量。
答案 1 :(得分:0)
您没有显示代码中最重要的部分receiveData
方法。正如您所说,您定期运行任务,您必须从该方法内再次调用postDelayed
来重新安排任务。可能涉及后台线程,因为您无法在主线程上进行网络连接。
退出活动时,您很可能遇到竞争条件。 onDestroy
先运行,然后再次发布任务。
答案 2 :(得分:0)
您应该使用
handler.removeCallbacksAndMessages(null);
然后所有处理程序回调将被删除。