有几个线程在关键字“Activity restart”上运行。 老实说,在发帖之前我已经尽力了。
在我的应用程序中,后台服务监控传感器(即使屏幕关闭)并启动 Activity 。为了打开屏幕并在锁定屏幕上显示 Activity ,我设置了以下标志
int flags = WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.flags |= flags;
一切都很完美,屏幕打开, Activity 显示在锁屏上。但是 Activity 正在重新启动。我不知道为什么 ? 此 Activity 方向设置为纵向。因此方向配置的更改不应重新启动 Activity 。我找不到重启的原因。还有什么可能是重启的原因?
为了避免重新启动,我还设置了 android:configChanges(以找出我包含所有可能的配置更改的原因
<activity android:label="@string/tstActivity_label"
android:name=".TstActivity"
android:screenOrientation="portrait"
android:noHistory="true"
android:excludeFromRecents="true"
android:configChanges="locale|keyboard|keyboardHidden|
navigation|orientation|screenLayout|
screenSize|smallestScreenSize|layoutDirection" >
</activity>
仍然没有积极的迹象, Activity 重新开始。也永远不会调用 onConfigurationChanged(Configuration newConfig)。
谁能帮我找到重启的原因以及如何避免?
为什么 android:configChanges 被忽略了。
已使用 API 级别 14 和 15 进行测试。
我的主要问题是我在 onStop() 中执行一些操作,这些操作应该只在 Activity 真正停止时而不是在它重新启动时执行。
谢谢。
注意:我还尝试使用唤醒锁和 keygaurd 管理器,同样的情况 Activity 正在重启。
最佳答案
Activity 没有被“重新创建”,它只是被“重新启动”。这是 Activity 生命周期的正常部分。如果由于配置更改而重新创建 Activity ,您还会看到 onDestroy()
和 onCreate()
被再次调用。这显然不是这种情况。
这里没有配置更改,这就是 onConfigurationChanged()
没有被调用的原因。
我认为发生的事情与启动 Activity 时屏幕关闭/锁定这一事实有关。 Activity 已创建并恢复,但随后 Android 注意到屏幕已关闭/锁定,因此它暂停了 Activity。然后它意识到应该显示 Activity ,所以它恢复 Activity 。我现在无法准确测试这种情况,但我确信当我们在屏幕关闭时启动 Activity 时,我已经在我自己的应用程序中看到过类似的行为。
您的应用应该能够处理对 onStart()
、onStop()
、onRestart()
、 的多次调用onPause()
和 onResume()
不会混淆。如果不是,您需要修复它。
关于android - 为什么 Activity 正在重启?如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474931/