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

noo*_*ber 16 lifecycle lifetime android-intent activity-lifecycle android-activity

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

我所做的

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

我所看到的

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

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

我所做的

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

我所看到的

WebView正在重新加载页面.

我的期望

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

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

我尝试了什么.

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

Twi*_*led 28

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

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

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

android:configChanges="orientation|keyboardHidden"
Run Code Online (Sandbox Code Playgroud)

...如果您的API级别低于13,则显示您的清单文件.或者

android:configChanges="orientation|keyboardHidden|screenSize"
Run Code Online (Sandbox Code Playgroud)

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

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

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


noo*_*ber 1

  1. 在Application.onCreate()中创建视图。
  2. 在 Activity.onCreate() 中将视图添加到布局中。
  3. 在 Activity.onDestroy() 中从布局中删除视图。

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