为什么在我的Activity启动后立即调用onStop?

yyd*_*ydl 11 android android-lifecycle android-activity

我有一个活动需要在启动时打开屏幕(以防屏幕关闭).所以在我看来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);
Run Code Online (Sandbox Code Playgroud)

使用这种直接的组合,我能够在我的后台服务启动时显示我的活动(是的,这是一个合法的案例).

然而,问题是当我在这种情况下启动我的活动时,存在一种非常奇怪的生命周期行为.使用广泛的日志记录,我能够确定在活动开始后立即发生以下7个步骤:

  1. 的onCreate
  2. 在onStart
  3. 的onResume
  4. 在onPause
  5. 的onStop
  6. 在onStart
  7. 的onResume

看到了吗?对于简单的活动开始,onStart被调用两次.更重要的是,onStop被神秘地称为,即使活动刚刚开始 - 没有任何事情会导致它停止.

我已经在许多不同的场景中对此进行了测试,看起来这种奇怪的行为只发生在屏幕关闭且活动在被破坏后启动时.如果屏幕打开,或者活动已停止[但尚未销毁],则活动正常启动,onStart仅调用一次.

结论:似乎当我的活动启动并且强制启动屏幕时,Android会启动活动,然后停止活动,然后再次启动它,原因无关紧要.

那么:为什么会这样呢?我有什么办法可以解决这个问题(所以只有在有正当理由的情况下才会调用onStop)?


笔记:

  • 有问题的活动是使用singleTasklaunchmode
  • 我试过禁用键盘锁/锁,但它没有效果
  • 我在运行Android 3.2的三星Galaxy Tab 10.1上见证了这种行为.我还没有测试这是否适用于其他任何事情......

Mun*_*ndi -3

您可以检查 中的情况onStart,设置静态或全局变量,然后检查该变量onStop以覆盖标准行为。