Android解锁设备后Activity重新启动

10

我正在创建一个简单的Android项目。但是每次用户解锁屏幕(在锁定后),我的每个活动都会重新启动。这是Android应用程序的正常行为吗?还是我需要在清单文件中处理它?或者是其他地方?请帮忙……


1
重启是什么意思?它对您想要避免的应用程序有什么影响? - Arnab Chakraborty
你是指你的活动行为还是你正在执行的操作正在重新启动? - Shreyash Mahajan
实际上,在activity的onCreate()方法中下载一张图片并在ImageView中显示。但是如果图片已经下载并且设备被锁定,手动解锁设备后,activity的OnCreate方法会再次被调用。这就是我想要避免的。 - Shivaprasad C
其实,在Activity的onCreate()函数会被调用。 - Shivaprasad C
需要在清单文件的每个活动中添加 android:configChanges="orientation|keyboardHidden"。这将解决问题。 - Shivaprasad C
2个回答

15

如果你的目标构建版本是蜂巢3.2(API级别13)或更高,那么你也必须加上screenSize标志,如下所示:

<activity
    android:configChanges="orientation|screenSize|keyboardHidden"
    android:name="YOUR ACTIVITY NAME">
</activity>

即使使用了"orientation"标志,当您的应用程序处于活动状态(无论是在屏幕上可见还是被锁定屏幕隐藏),每次方向改变时您的应用程序都会被杀死并重新创建。这是因为可用屏幕大小,尤其是在平板电脑上,实际上由于系统操作栏位置的变化而发生变化。

这让我疯狂了几个小时! :/


文档还说明,仅当目标SdkVersion为13或更高版本时才需要“screenSize”。否则,您的活动将自行处理配置更改(即使在运行Android 3.2或更高版本的设备上,此配置更改也不会重新启动您的活动)。 - Pavel Alexeev
确实,你是完全正确的,这就是为什么我在答案顶部声明的原因。只有当你构建的目标(不是minSdkVersion而是targetSdkVersion)是13或更高版本时,才必须提供此标志。如果应用程序在任何旧版Android中启动,则该标志将被完全忽略。 - Sobakus
正常工作了。在我的情况下,对于某些设备,在解锁屏幕后应用程序突然关闭。通过将此screenSize添加到所有活动的configchanges中进行修复。非常感谢! - NoAngel

4

需要在每个Activity中的清单文件中添加android:configChanges="orientation|keyboardHidden",这样就可以解决问题了。

    <activity
        android:configChanges="orientation|keyboardHidden"
        android:name="YOUR ACTIVITY NAME">
    </activity>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接