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

标签 android android-activity android-lifecycle

我有一个 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);

使用这种简单的组合,我能够使我的 Activity 在从我的后台服务启动时显示(是的,这是一个合法的案例)。

然而,问题在于,在这种情况下,当我启动我的 Activity 时,会出现非常奇怪的生命周期行为。使用大量日志记录,我能够确定以下 7 步过程在 Activity 开始后立即发生:

  1. onCreate
  2. 开始
  3. onResume
  4. 暂停
  5. 停止
  6. 开始
  7. onResume

看到了吗?对于一个简单的 Activity 启动,onStart 被调用两次。更重要的是,onStop 被神秘地调用了,即使 Activity 刚刚开始 - 并且没有发生任何会导致它停止的事情。

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

底线:当我的 Activity 启动并强制打开屏幕时,Android 会启动 Activity,然后停止它,然后无缘无故地再次启动它。

那么:为什么会这样?我能做些什么来解决这个问题(这样只有在有正当理由的情况下才会调用 onStop 吗)?


注意事项:

  • 相关 Activity 正在使用 singleTask 启动模式
  • 我试过禁用键盘保护/锁,但没有效果
  • 我在运行 Android 3.2 的 Samsung Galaxy Tab 10.1 上看到了这种行为。我还没有测试这是否适用于其他任何东西......

最佳答案

我在这里遇到了类似的问题: Activity Lifecycle X Power Button X Lock Screen

问题是,由于我的 Activity 是强制横向的,当我打开屏幕时,它以纵向显示锁定屏幕,这导致配置更改,从而破坏了当前的 Activity。

解决方案是在我的 AndroidManifest.xml 中的 Activity 上添加一个 android:configChanges="orientation"。

关于android - 为什么在我的 Activity 启动后立即调用 onStop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10829005/

相关文章:

android - 如何在android中使用文本编写这种类型的图标

java - ExoPlayer 流 mp3

安卓 startActivityFromChild

android - 将多个字符串传递给其他 Activity

androidx.appcompat.app.AppCompatActivity 没有实现 LifecycleOwner

android - Android Studio 是否有 Hierarchy Viewer 或 Layout Inspector?

android - 如何通过 kotlin 中的 Intent 传递对象的 MutableList

android - 在 Activity 之间滑动

android - 如何从 EditText Android 获取值

android - 尽管数据没有改变,但一些 fragment 观察者在从返回堆栈弹出后触发