处理程序正在阻止活动完成

Naz*_*rke 3 android handler android-activity

我已经声明了 private Handler mHandler = new Handler(); 并在我的活动中多次使用此处理程序。例如:

        // fade out view nicely after 5 seconds
        mHandler.postDelayed(new Runnable() {
            public void run() {
                tview.setText(null);
            }
        }, 4000);
Run Code Online (Sandbox Code Playgroud)

或者

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);
Run Code Online (Sandbox Code Playgroud)

现在,如果我返回(通过按下后退按钮)当这个处理程序已经开始它的动作时,因为这个处理程序活动没有完成。我希望 mHandler 停止它正在做的任何事情并且不阻止活动完成。我怎么做?

Sim*_*iak 5

我怎么做?

我有点困惑你想说什么,但如果我理解正确,你需要覆盖onBackPressed()方法,在这里你将停止 Handler 并完成 Activity。

伪代码:

@Override
public void onBackPressed() {
   // stop Handler
   handler.removeCallbacks(runnable);
   // to stop anonymous runnable use handler.removeCallbacksAndMessages(null);
   finish();
}
Run Code Online (Sandbox Code Playgroud)

由于您的Runnable是匿名的,您需要使用第二种方法:

handler.removeCallbacksAndMessages(null);
Run Code Online (Sandbox Code Playgroud)

如果你对这个方法感到困惑,这里是它的文档:

删除任何挂起的回调和已发送的 obj 为令牌的消息。如果 token 为空,所有回调和消息将被删除。