从手机锁恢复不会调用onStart?

时间:2012-12-26 17:02:12

标签: android

我发现在应用启动时执行手机锁定会使我的初始AsyncTask失步,因为它在解锁后不会调用onStart(我将Activity附加到任务中并将其分离到任务中)。显然手机锁定模式意味着与使用Home或Back按钮不同的任何应用程序,因为在后者,我的应用程序可以处理它们。似乎锁定/解锁模式没有关闭应用程序,但它也没有让它运行,所以在我看来这是一种非常愚蠢的意外行为,因为我“丢失”我的AsyncTask和我的应用程序没有正确初始化。

如何在手机解锁时执行某些逻辑,因为解锁/锁定似乎没有调用任何生命周期方法?我是否必须区分锁定开/关和屏幕开/关?

3 个答案:

答案 0 :(得分:0)

我很确定THIS问题会告诉你你想知道什么。

基本上你要做的是创建一个Broadcast Receiver来监听以下意图:

Intent.ACTION_USER_PRESENT

当用户解锁屏幕时,系统会发送意图。您可以查看文档HERE

答案 1 :(得分:0)

有关生命周期的详细说明,请参阅Activity Lifecycle文档,并附图。

最有可能的是,您的活动在屏幕关闭时被杀死以节省资源(电池电量)。正如文档所述,你可以在Android想要释放资源的任何时候被杀死。因此,您应该始终将您的活动设计为能够随时停止和重新启动 我有一次类似的问题。我的应用程序仅在横向上,当关闭屏幕时,Android屏幕保护程序控制(它处于纵向模式),因此发送了一个direChange,用于销毁并重新创建活动。

一个简单的解决方案是声明您将管理自己的屏幕方向更改:

<activity ... android:configChanges="orientation" ... >

如果您的活动被宣布为仅景观(您必须不做任何事情),这很容易,但如果您的活动可以轮换,则会变得更难......

答案 2 :(得分:0)

我找到了一个适合我的解决方案。由于Squonks评论,我看到onResume将被执行。我能够调整我的应用程序的逻辑,以便我的应用程序可以在onResume中处理AsyncTask(附加/分离+显示进度对话框+初始化)。