我有一个活动需要在启动时打开屏幕(以防屏幕关闭)。所以在我的onCreate
,我有:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
|WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
|WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
使用这种简单的组合,我可以让我的活动在从我的后台服务启动时显示(是的,这是一个合法的案例)。
然而,问题在于,当我在这种情况下启动我的活动时,会有一个非常奇怪的生命周期行为。使用广泛的日志记录,我发现活动开始后立即发生以下 7 步过程:
- 创建
- 开始
- 恢复
- 暂停
- 停止
- 开始
- 恢复
看到了吗?对于简单的活动启动,onStart 会被调用两次。更重要的是,onStop 被神秘地调用了,即使活动刚刚开始 - 并且没有发生任何会导致它停止的事情。
我已经在许多不同的场景中对此进行了测试,似乎这种奇怪的行为只发生在屏幕关闭并且活动在被破坏后启动时才会发生。如果屏幕打开,或者活动已停止 [但尚未销毁],活动将正常启动,并且 onStart 仅调用一次。
底线:似乎当我的活动启动并强制打开屏幕时,Android会启动该活动,然后停止它,然后无缘无故地再次启动它。
那么:为什么会发生这种情况?我能做些什么来解决这个问题(以便在有正当理由之前不会调用 onStop)?
笔记:
- 有问题的活动正在使用启动
singleTask
模式 - 我试过禁用键盘锁/锁,但没有效果
- 我在运行 Android 3.2 的三星 Galaxy Tab 10.1 上目睹了这种行为。我没有测试这是否适用于其他任何东西......