我的理解,显然是错误的,只要按下后退按钮就会调用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()
之前启动的功能?提前感谢您提供任何信息。
答案 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();
}
}