我已声明私有Handler mHandler = new Handler();并在我的活动中多次使用此处理程序。例如:
// fade out view nicely after 5 seconds
mHandler.postDelayed(new Runnable() {
public void run() {
tview.setText(null);
}
}, 4000);
或
mHandler.postDelayed(new Runnable() {
public void run() {
tview.setText(null);
parentLayout.findViewById(R.id.fireplace).setVisibility(View.GONE);
parentLayout.removeView(findViewById(R.id.fireplace));
water_room.setVisibility(View.VISIBLE);
playSound(fountainSoundID);
}
}, 3000);
现在,如果我回去(通过按下后退按钮)当这个处理程序已经启动它的动作时,因为这个处理程序活动没有完成。我希望mHandler停止它正在做的事情并且不让活动完成。我该怎么做?
答案 0 :(得分:4)
我该怎么做?
我有点困惑你想说什么但如果我理解正确,你需要覆盖onBackPressed()方法,在这里你将停止处理程序并完成活动。
<强>的伪代码:强>
@Override
public void onBackPressed() {
// stop Handler
handler.removeCallbacks(runnable);
// to stop anonymous runnable use handler.removeCallbacksAndMessages(null);
finish();
}
由于您的 Runnable 是匿名的,因此您需要使用第二种方法:
handler.removeCallbacksAndMessages(null);
如果您对此方法感到困惑,请参阅以下文档:
删除任何待处理的回调帖子并发送其obj为的消息 令牌。如果token为null,则将删除所有回调和消息。
答案 1 :(得分:0)
获取Runnable
的指针,然后尝试以下操作:
@Override
public void onBackPressed() {
myHandler.removeCallbacks(myRunnable);
finish();
}