2011-04-06 130 views
5

这是我的理解,显然是错误的,onPause()被称为每当后退按钮被按下?现在,在我的代码,我把这个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

这是真的:有情况下'当片段不再可见时,onPause()不会被调用!我有同样的问题,但情况不同。看来FragmentManager仍然可以在内存中保存碎片。当用户点击返回按钮时,可以取代FM,将整个碎片集合交换出来并显示以前的状态。这可能会错过这些片段的所有onPause,onStop和onDestroy方法。 - 我错了吗? – 2017-04-24 14:32:41

回答

2

您应该通过覆盖onKeyDown来检查后退按钮,而不是在中进行测试。 只要您的活动 不再在后台 离开前台时被调用;它不一定完成。 (您可以检查isFinishing()。)有关处理后退密钥的更多信息,请参阅here

+1

不要检查后退按钮。在许多情况下,这是一种可怕的破解行为。有无数其他方法可以将活动带到后台(来电,主页按钮等)。 – EboMike 2011-04-06 21:18:13

+0

非常感谢你,我已经开始走下这条路,并很快意识到我出错的地方。尽管感谢迅速的回应! – 2011-04-06 21:25:54

+0

@EboMike - 为什么在许多情况下检查后退按钮是否有破解并且一定会中断?这正是Dianne Hackborn在我引用的博客文章中建议的策略。这比在'onPause()'中检查这种事情要好得多。 – 2011-04-06 22:00:05

3

将始终在您的活动不在前台时被调用,这是有保证的。也许你的_END_GAME不是错误的?添加一个调试日志输出到你的onPause方法,你会发现它总是被调用。

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

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

如果你确实想拦截后退按钮,你可以检查Ted建议的按钮,但请记住,你的应用程序可以通过许多其他方式转到后台 - 主页按钮,选定的通知,来电电话等

+0

是的,正如我所说的,我只是在调试,不会有对话框在最终使用。 – 2011-04-06 21:25:01

2

被调用,并且您的对话框显示,只是在Android完成您的应用程序之前的一小段时间。如果你想看看发生了什么,把日志语句放在那里。

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

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