当屏幕关闭时,安卓活动表现异常?

8
我注意到在安卓手机锁屏并关闭屏幕时,出现了一些有趣的活动流程...我的应用程序按照常规流程运行,onCreate、onStart和onResume。然后,我让手机放在那里。当屏幕变黑时,onPause被调用。这没问题。然后5秒钟后,应用程序被杀死(onStop,onDestroy)。这也没问题。但是,在onDestroy被调用之后立即,onCreate、onStart和onResume被调用,重新启动应用程序,尽管屏幕是黑的。应用程序有一个加载时间,并且在启动时播放声音,所以当你放下手机30秒后,它突然开始发出声音,感觉有点吓人。为什么安卓会杀死应用程序然后重新启动它?目标版本是2.1-update,手机是三星Captivate。还有其他人遇到这个问题吗?有没有办法停止它?
2个回答

4
可能你没有看到这种情况,但在我的手机上,由于睡眠模式始终处于一个方向,如果应用程序处于另一个方向,它将被杀死并在睡眠方向下重新创建...如果你问我,这是相当次优的。
对我来说,听起来像是您的启动音与特定原因没有关联。如果您在手机处于“开启”状态时旋转它会发生什么?无论如何,您应该能够检测到屏幕未开启,并且不进行(或推迟)真正的启动。
如果隐式方向更改是罪魁祸首,则可以使用以下方式更改应用程序的处理方式-将其设置为声明您的应用程序可以随时更改而不必重新创建。

我认为Chris Stratton在这里是正确的。您还可以在以下相关问题中找到更多有关如何处理此问题的信息:https://dev59.com/inRB5IYBdhLWcg3w9Lzn - Julian
该应用程序被锁定为横屏模式。在运行时更改方向没有任何效果。但我可以看到安卓可能会在睡眠期间尝试将其重新启动为纵向模式。现在是时候去寻找能够告诉我屏幕是否开启或关闭的例程了。 - dwrussell2
如果您的屏幕进入睡眠状态,您可能想尝试观察logcat。如果您有类Unix的开发机器,可以执行类似adb logcat | tee logfile的操作,并稍后返回查看。如果它正在执行睡眠方向的操作,您将在日志文件中看到这一点。 - Chris Stratton
是的,看着logcat。我看到一个“配置更改”通过,很快onStop被调用,杀死了我的应用程序。太糟糕了。如果手机在应用程序运行期间进入睡眠状态,我就会被杀掉...我不能像其他人一样进入onPause和onResume,我必须从头开始(我尝试重写所有关闭函数并忽略这种情况下的super,但它只会崩溃)。我会找到一些方法来解决这个问题。 - dwrussell2
如果您设置了运行应用程序中处理方向更改的操作,那么您就不应该再被杀死和重新创建。 - Chris Stratton
我会尝试一下。目前,我只是设置了setKeepScreenOn(true),这可以防止它杀掉我(或睡眠,这很糟糕)。稍后我会尝试处理方向变化。 - dwrussell2

3
在活动的清单中,对于每个应用程序添加以下内容:
android:configChanges="orientation|keyboardHidden"

这告诉Android你将自己处理这两种情况 - 当然你在撒谎:你不会做任何事情来处理它们,但Android并不知道。这对于以横向模式运行并且永远不更改方向的应用程序/游戏等非常有效。


谢谢!它只能在这种方式下运行android:configChanges="orientation",但对我来说很好。 - Adrian C.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接