当用户打开片段时,我需要在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);
}
}
我需要知道如何取消处理程序。
答案 0 :(得分:1)
我需要知道如何取消处理程序
没有像处理程序一样开始或停止或取消。要做的只是将可运行对象和消息发布到线程队列中。
您已经写了handler.removeCallbacks(runnable);
来删除您之前开始的回调。我认为这对您来说就足够了。