按下后退按钮时没有调用onPause?

时间:2011-04-06 21:09:01

标签: android back-button

我的理解,显然是错误的,只要按下后退按钮就会调用onPause()?现在,在我的代码中,我已将此onPause()事件:

@Override
protected void onPause(){
    super.onPause();        

    if(!_END_GAME){
        Builder _alert = new AlertDialog.Builder(this)
        .setMessage("onPause, with game NOT over!");
        _alert.setNeutralButton("OK.",
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface arg0, int arg1) {
                arg0.dismiss(); // Kills the interface
                System.runFinalizersOnExit(true);
                finish();
            }
        });
        _alert.setTitle("Your Score!");
        _alert.show();
    }

}

现在的问题是,对话框没有启动,所以代码出错了。我把对话框放在那里试图想象onPause()的调用位置,并帮我调试其他一些变量等。但就像我说的那样,它甚至都没有显示出来。任何想法为什么会这样?当按下后退按钮时,是否有onPause()之前启动的功能?提前感谢您提供任何信息。

3 个答案:

答案 0 :(得分:4)

当您的活动不再在前台时,将始终调用

onPause,这是有保证的。也许你的_END_GAME不是假的?将调试日志输出添加到onPause方法,您将看到它始终被调用。

我应该注意,在onPause期间显示一个对话框是非常糟糕的形式 - 用户试图摆脱你的应用程序(甚至可能是因为来电)。那你不想要对话。这违反了Android设计。

事实上,如果您尝试在onDestroy或onPause中执行冗长的恶作剧,Android操作系统将简单地缩短您的应用程序。基本上,如果那些被叫,你应该安静地消失。

如果您真的想拦截后退按钮,可以查看Ted建议的按钮,但请记住,您的应用可以通过许多其他方式转到后台 - 主页按钮,所选通知,来电,等

答案 1 :(得分:2)

您应该通过覆盖onKeyDown来检查后退按钮,而不是在onPause中进行测试。只要您的活动不再在后台离开前景,就会调用onPause;它不一定完成。 (您可以检查isFinishing()。)有关处理返回键的详细信息,请参阅here

答案 2 :(得分:2)

onPause正在调用,您的对话框正在显示,只需在Android完成您的应用之前进行一小段时间。如果你想观察正在发生的事情,请将日志语句放在那里。

如果您想在按下后退按钮时显示对话框,那么最简单的方法(适用于Android 2.1+)将覆盖您活动中的onBackPressed方法

@Override
public void onBackPressed() {
    if (gameRunning) {
        // show dialog
    } else {
        // exit
        super.onBackPressed();
    }
}