关键字“Activity restart”上运行了多个线程。 老实说,我在发布之前就做到了最好。
在我的应用程序中,后台服务监视传感器(即使屏幕处于关闭状态)并启动活动。为了打开屏幕并在锁定屏幕上显示活动,请设置以下标志
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正在重启。我不知道为什么 ? 此活动方向设置为纵向。因此,方向配置的更改不应重新启动活动。我找不到重启的原因。还有什么可能是重启的原因?
为了避免重启我还设置了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>
仍未出现积极迹象,活动重启。此外,永远不会调用onConfigurationChanged(Configuration newConfig)。
有人可以帮助我找到重新启动的原因以及如何避免它吗?
为什么要忽略android:configChanges。
使用API级别14和15进行测试。
我的主要问题我在onStop()中做了一些操作,这些操作应该仅在活动真正停止时才进行,而不是在重新启动时进行。
谢谢。
注意:我也试过wakelocks和keygaurd经理,同样的故事Activity正在重启。
答案 0 :(得分:2)
活动未被“重新创建”,只是“重新启动”。这是活动生命周期的正常部分。如果由于配置更改而重新创建活动,您还会看到再次调用onDestroy()
和onCreate()
。事实显然并非如此。
这里没有配置更改,这就是为什么onConfigurationChanged()
没有被调用。
我认为发生的事情与您的活动启动时屏幕关闭/锁定这一事实有关。活动已创建并恢复,但随后Android会注意到屏幕已关闭/锁定,因此会暂停活动。然后它意识到应该显示活动,因此它恢复活动。我现在无法完全测试这个案例,但是当我们在屏幕关闭时启动活动时,我确信我在自己的应用程序中看到了类似的行为。
您的应用应该可以处理对onStart()
,onStop()
,onRestart()
,onPause()
和onResume()
的多次调用,而不会产生混淆。如果没有,你需要解决这个问题。
答案 1 :(得分:0)
使用处理程序。在onCreat()期间向Handler发送一条消息,延迟为100毫秒。这段时间我的活动暂停并再次恢复。现在当处理程序收到消息时,启动实际功能。在我的情况下,当收到消息时,我启动音乐并在onStop()中没有任何条件,停止音乐。