为什么活动正在重启?怎么避免呢?

时间:2013-08-27 20:34:25

标签: android android-activity restart

关键字“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正在重启。

2 个答案:

答案 0 :(得分:2)

活动未被“重新创建”,只是“重新启动”。这是活动生命周期的正常部分。如果由于配置更改而重新创建活动,您还会看到再次调用onDestroy()onCreate()。事实显然并非如此。

这里没有配置更改,这就是为什么onConfigurationChanged()没有被调用。

我认为发生的事情与您的活动启动时屏幕关闭/锁定这一事实有关。活动已创建并恢复,但随后Android会注意到屏幕已关闭/锁定,因此会暂停活动。然后它意识到应该显示活动,因此它恢复活动。我现在无法完全测试这个案例,但是当我们在屏幕关闭时启动活动时,我确信我在自己的应用程序中看到了类似的行为。

您的应用应该可以处理对onStart()onStop()onRestart()onPause()onResume()的多次调用,而不会产生混淆。如果没有,你需要解决这个问题。

答案 1 :(得分:0)

使用处理程序。在onCreat()期间向Handler发送一条消息,延迟为100毫秒。这段时间我的活动暂停并再次恢复。现在当处理程序收到消息时,启动实际功能。在我的情况下,当收到消息时,我启动音乐并在onStop()中没有任何条件,停止音乐。