0

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

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

4

3 回答 3

0

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

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

Intent.ACTION_USER_PRESENT

当用户解锁屏幕时,系统会发送意图。你可以在这里查看它的文档。

于 2012-12-26T17:21:06.357 回答
0

有关生命周期的良好描述,请参阅活动生命周期文档,并带有图表。

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

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

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

如果您的活动被声明为仅横向(您无需执行任何操作),这很容易,但如果您的活动可以旋转,则可能会变得更难......

于 2012-12-26T17:22:51.260 回答
0

I found a solution which works for me. Due to Squonks comment I saw that onResume will be executed. I was able to adapt the logic of my app so my app can handle the AsyncTask (attaching/detaching + showing progress dialog + initialization) in onResume now.

于 2012-12-27T11:39:02.507 回答