删除回调处理程序无法正常工作(Remove callback for handler not wor

2019-09-21 06:20发布

我写了调用该方法,每次间隔的处理程序。 我想在删除处理程序上的destroy()。 i设定为使用的代码如下,在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不行。 在退出活动后调用。

Answer 1:

removeCallbacks(可运行R) :

移除是在消息队列中可运行为r的任何待处理的讯息。

所以removeCallbacks(..)仅停止未决消息(的Runnable)目前没有运行可运行的,所以如果要停止正在运行的可运行的,然后使用布尔varaible用于回采线程时从您的应用程序的用户退出。

看到这个帖子的removeCallbacks不停止运行的



Answer 2:

你是不是表示作为代码的最重要的部分receiveData方法。 至于你说你会定期运行任务,你必须再次调用postDelayed从该方法重新安排里面的任务。 可能参与,你不能做在主线程联网后台线程。

在退出活动时,最有可能有一个竞争条件。 onDestroy先运行,然后将任务重新公布。



Answer 3:

您应该使用

handler.removeCallbacksAndMessages(null);

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



文章来源: Remove callback for handler not work