【发布时间】:2019-09-01 23:24:29
【问题描述】:
当用户打开一个片段时,我需要在 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);
}
}
我需要知道如何取消处理程序。
【问题讨论】:
-
你是如何在activity中添加fragment的?您使用了以下哪种方法:addToBackStack(name) or replace(containerViewId, fragment, tag) or add(containerViewId, fragment, tag);
-
@SultanMahmud 我用过
replace -
在 onResume 方法中添加片段可见时的处理程序代码 if ( this.isVisible()) { // 添加处理程序代码 }
-
你能展示你的完整片段代码吗?
标签: android android-layout android-fragments android-handler