我正在开发的警报应用程序有几个问题。
我认为有点奇怪的第一件事是,当闹钟响起并唤醒手机时。这些事情发生了。
oncreate
onresume
onpause
onresume
他们为什么按这个顺序运行?最后两个不应该叫吗?这就是给我带来大麻烦的原因,因为当我按下 home 键或返回电话时,onPause 会运行,我想从中调用 finish()。这部分可以正常工作,但是当手机由于 onPause 呼叫而从睡眠中唤醒时,这不起作用......
有任何想法吗?
我正在开发的警报应用程序有几个问题。
我认为有点奇怪的第一件事是,当闹钟响起并唤醒手机时。这些事情发生了。
oncreate
onresume
onpause
onresume
他们为什么按这个顺序运行?最后两个不应该叫吗?这就是给我带来大麻烦的原因,因为当我按下 home 键或返回电话时,onPause 会运行,我想从中调用 finish()。这部分可以正常工作,但是当手机由于 onPause 呼叫而从睡眠中唤醒时,这不起作用......
有任何想法吗?
我也有类似的问题:我在后台创建了一个活动和一个服务。当服务从网络接收到一些数据时,它会启动活动。一切正常,直到活动处于 onStop 阶段并且屏幕变黑。当我遇到这种情况并请求重新启动活动时,我有:
onRestart onStart onResume onPause onNewIntent onResume
正如你所看到的,我有一个 onResume、onPause 和另一个 onResume,并且活动来到了用户面前。
似乎是因为我们使用了 singleTop 或 singleInstance Activity(可能也出现在 singleTask 上)。问题在于,当您向已创建的 singleTop Activity 发送 Intent 时,您的新 Intent 会激活 onNewIntent() 方法。从 API 你可以看到:
在接收到新意图之前,活动将始终暂停,因此您可以指望在此方法之后调用 onResume()。
所以也许这就是你收到 onResume-onPause-onResume 电话的原因。
然而,这是一种奇怪的行为!
你真的想在 onPause() 中调用 finish() 吗?当当前活动不再在前台时调用 onPause()。也许你想在你的 onStop() 方法中调用 finish() 。有关详细信息,请参阅Activity lifecycle
。
我建议您查看官方警报应用程序如何处理事件: https ://android.googlesource.com/platform/packages/apps/DeskClock