处理程序不从removeCallbacksAndMessages()方法中删除回调

时间:2019-04-11 10:42:11

标签: android android-layout android-fragments android-handler

当用户打开片段时,我需要在30秒后致电服务。因此,我执行以下代码。

handler.postDelayed(runnable, 30000); 

runnable = new Runnable() {
    public void run() {
       fetchData(true);
    }
};

但是当用户离开片段时,我需要停止此处理程序,因此我在所有可能的暂停块中执行以下代码,但是问题是,如果我转到其他片段或将应用程序放入其中,它会继续击中服务。历史。

@Override
public void onStop() {
    super.onStop();
    if(handler!=null) {
        handler.removeCallbacksAndMessages(null);
        handler.removeCallbacks(runnable);
}


@Override
public void onPause() {
    super.onPause();
    if(handler !=null){
        handler.removeCallbacksAndMessages(null);
        handler.removeCallbacks(runnable);
    }
}


@Override
public void onDetach() {
    super.onDetach();
    if(handler !=null){
        handler.removeCallbacksAndMessages(null);
        handler.removeCallbacks(runnable);
    }
}

我需要知道如何取消处理程序。

1 个答案:

答案 0 :(得分:1)

  

我需要知道如何取消处理程序

没有像处理程序一样开始或停止或取消。要做的只是将可运行对象和消息发布到线程队列中。

您已经写了handler.removeCallbacks(runnable);来删除您之前开始的回调。我认为这对您来说就足够了。