防止在关闭屏幕时重新创建Android活动

时间:2012-05-08 12:29:12

标签: android-intent android-activity lifecycle lifetime activity-lifecycle

如何防止在关闭屏幕时重新创建活动?

我做什么

  
      
  1. 启动Bejewels并前往珠宝屏幕。
  2.   
  3. 很快按下电源按钮。屏幕已关闭,但设备未关闭。
  4.   
  5. 再次按电源按钮。
  6.   

我看到的内容

  

与关闭屏幕前相同的屏幕。

如果是我的应用程序(简单的应用程序,只是一个带有单个WebView的Web应用程序),则方案如下:

我做什么

  
      
  1. 启动我的应用。活动onCreate()方法将URL加载到WebView中。
  2.   
  3. 很快按下电源按钮。屏幕已关闭,但设备未关闭。
  4.   
  5. 再次按电源按钮。
  6.   

我看到的内容

  

WebView正在重新加载页面。

我的期望

  

在Bejewels案例中,我希望看到相同的屏幕,我的应用程序是以前状态的页面:脚本正在运行,表单字段是   填充等。

调试显示,我错了(在上一个问题中),onDestroy()和onCreate()在屏幕刚打开时被逐个调用。由于我仍然听到由脚本播放的音乐,当屏幕关闭时,看起来活动和WebView都存在,直到我再次按下电源按钮。

我尝试了什么。

  1. android:alwaysRetainTaskState =“true”同样的行为。
  2. 阅读意图(无济于事,我只是不明白,它们如何适用于我的情况)。
  3. 使用PhoneGap。它的行为有所不同:只需按下电源按钮就可以杀死整个应用程序。这是更好的,但不是最好的。

3 个答案:

答案 0 :(得分:28)

此问题的解决方案可能与此处描述的相同:onDestroy gets called each time the screen goes on

听起来您的活动因配置更改而重新启动,请参阅http://developer.android.com/guide/topics/resources/runtime-changes.html。最常见的是当您的应用处于横向模式(如大多数游戏)时,然后通过点击电源按钮启用屏幕锁定。屏幕锁定处于纵向模式,因此会触发方向更改,从而触发重新启动的活动。

可以通过添加以下内容来覆盖此行为:

android:configChanges="orientation|keyboardHidden"
如果您的API级别低于13,则

...到您的清单文件。或者

android:configChanges="orientation|keyboardHidden|screenSize"

...如果您的API级别大于13。

请注意,您可能需要转到project->属性并更新项目构建目标。如果您的构建目标小于13,则无法识别“screenSize”。

可能是一个不同的配置更改导致活动被重置。以下链接提供了可能的配置更改列表:http://developer.android.com/guide/topics/manifest/activity-element.html#config

答案 1 :(得分:1)

添加:

android:launchMode="singleTop"

清单xml中的活动部分。 见http://developer.android.com/guide/topics/manifest/activity-element.html

答案 2 :(得分:1)

  1. 在Application.onCreate()中创建视图。
  2. 将视图添加到Activity.onCreate()中的布局。
  3. 从Activity.onDestroy()中的布局中删除视图。
  4. 详细信息如下: Attach/detach Android view to/from layout