我在我的应用中创建了一个处理程序。此处理程序的功能是,如果它在15秒内没有检测到任何用户输入(触摸,拖动等),它将启动一个新活动。 这是相同的代码。
public void startHandler(long duration) {
if (handler != null) {
handler.postDelayed(r, duration);
Log.d("handler", "inside if");
} else {
Log.d("handler", "inside else");
handler = new Handler();
r = new Runnable() {
@Override
public void run() {
Log.d("handler", "handler running");
// TODO Auto-generated method stub
Intent intent = new Intent(ActivityProducts.this, ActivityVideo.class);
startActivity(intent);
}
};
handler.postDelayed(r, duration);
}
}
此处持续时间是动态的,并从服务器获取。
以下是停止处理程序的代码。
public void stopHandler() {
if (handler != null) {
handler.removeCallbacks(r);
handler.removeCallbacksAndMessages(null);
handler = null;
}
}
以下是启动处理程序的代码
@Override
public void onUserInteraction() {
// TODO Auto-generated method stub
super.onUserInteraction();
Log.d("user", "interacted");
//stop first and then start
if (duration != 0) {
stopHandler();
startHandler(duration);
}
}
我在所有方法 onPause,onStop和onDestroy 中停止处理程序。但问题是,如果我从此活动导航到任何其他活动,则启动处理程序代码仍会执行并将我带到视频活动。
那么停止处理程序的正确方法是什么?