处理程序保持活动完成

时间:2013-12-04 13:40:59

标签: android android-activity handler

我已声明私有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停止它正在做的事情并且不让活动完成。我该怎么做?

2 个答案:

答案 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();
}