2011-11-28 62 views
4

我正在记录每个onCreate()和onDestroy()调用。我发现,当我点击我的Android电源按钮(和在模拟器上呢!)我的活动如何防止在Android上按下电源按钮时调用onDestroy()后跟onCreate()

> onDestroy(); 
> onCreate(); 

杀死我的游戏,然后立即从一开始就重新打开了电话。当然,一旦用户解锁屏幕,游戏将显示在主菜单中,并且所有进程都被终止。

是否可以重写或禁用此行为?

+3

你为什么不救的进展,你将自己(如有必要)处理的配置变化在onDestroy()方法中,并检查onCreate()方法中保存的游戏(并恢复进度)? – ethan

回答

10

当您按下电源按钮时,通常会启用屏幕锁定。这可能会触发当前位于前台的活动的配置更改(屏幕锁定通常处于纵向模式),导致其被破坏并重新创建。

声明android:configChanges="keyboardHidden|orientation"在AndroidManifest.xml中这样的活动可以防止它们被破坏并重新创建,但也意味着通过覆盖onConfigurationChanged

+5

这是正确的答案!但是请注意,如果您的目标是API 13或更高,那么按下电源按钮也会触发'screenSize'的更改。因此,这也需要重写以获得所需的行为:android:configChanges =“keyboardHidden | orientation | screenSize” –

+0

我没有注意到API13的screenSize变化,补充说它解决了我的问题,谢谢。 – Vince

3

当调用onCreate()onDestroy()方法时(至少在不经历非常多的痛苦时),您无法重写。要做的最好的事情是弄清楚如何在被调用的范围内工作。将您的状态保存在onDestroy()。让它可以让你的应用程序容忍这个调用序列,因为坦率地说,它应该/必须。这正是Android的工作原理。

+0

如何检测到此通话来自电源按钮? – PiotrK

+0

据我所知,你不能。但是没关系,因为最后调用onDestroy()或onCreate()并不重要,只是调用了它们。 –

相关问题