18

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

我做什么

  1. 启动 Bejewels 并转到珠宝屏幕。
  2. 短按电源按钮。屏幕已关闭,但设备未关闭。
  3. 再次按下电源按钮。

我所看到的

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

对于我的应用程序(一个微不足道的应用程序,只是一个带有单个 WebView 的 Web 应用程序),场景如下:

我做什么

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

我所看到的

WebView 正在重新加载页面。

我所期望的

就像在 Bejewels 案例中一样,我希望看到相同的屏幕,对于我的应用程序来说,它是处于之前状态的页面:脚本正在运行,表单字段已填充等。

调试表明,我错了(在上一个问题中)并且 onDestroy() 和 onCreate() 在屏幕刚刚打开时被一个接一个地调用。而且由于我仍然听到由脚本播放的音乐,因此当屏幕关闭时,看起来活动和 WebView 确实存在,直到我再次按下电源按钮。

我试过了。

  1. android:alwaysRetainTaskState="true" 相同的行为。
  2. 阅读有关意图(无济于事,我只是不明白,它们如何应用于我的情况)。
  3. 使用 PhoneGap。它的行为不同:只是在按下电源按钮时杀死整个应用程序。这更好,但不是最好的。
4

3 回答 3

29

此问题的解决方案可能与此处描述的相同:每次屏幕继续时都会调用 onDestroy

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

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

android:configChanges="orientation|keyboardHidden"

... 如果您的目标 API 级别低于 13,则添加到您的清单文件中。或者

android:configChanges="orientation|keyboardHidden|screenSize"

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

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

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

于 2012-12-27T18:05:14.817 回答
1

添加:

android:launchMode="singleTop"

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

于 2012-05-08T12:32:44.567 回答
1
  1. 在 Application.onCreate() 中创建视图。
  2. 在 Activity.onCreate() 中将视图添加到布局中。
  3. 在 Activity.onDestroy() 中从布局中移除视图。

详细信息在这里: 附加/分离Android视图到/从布局

于 2012-05-09T10:56:31.780 回答