当用户打开片段时,我需要在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);
}
}
我需要知道如何取消处理程序。
我需要知道如何取消处理程序
没有像启动或停止或取消处理程序。它的工作就是将Runnables和Messages发布到线程队列。
你已经写了handler.removeCallbacks(runnable);
来删除之前开始的callBacks。我认为这对你来说已经足够了。