活动生命周期X电源按钮X锁定屏幕

thi*_*olr 15 android android-lifecycle

当我按下电源键时,屏幕关闭(完全黑暗),系统会破坏我的活动,然后重新创建它:

03-28 22:48:00.934: V/[BB](5809): [GameControl] onPause
03-28 22:48:01.444: V/[BB](5809): [GameControl] onDestroy
03-28 22:48:01.724: V/[BB](5809): [GameControl] onCreate
03-28 22:48:03.016: V/[BB](5809): [GameControl] onResume
03-28 22:48:03.016: V/[BB](5809): [GameControl] onPause
Run Code Online (Sandbox Code Playgroud)

这是因为我的活动具有固定方向(横向)并且锁定屏幕是纵向.

我通过设置固定的纵向方向测试了这个理论,但问题没有发生.我还检查了getResources().getConfiguration()值:

{ scale=1.0 imsi=724/31 loc=pt_BR touch=3 keys=2/1/1 nav=1/1 orien=2 layout=17 uiMode=17 seq=36}
{ scale=1.0 imsi=724/31 loc=pt_BR touch=3 keys=2/1/1 nav=1/1 orien=1 layout=17 uiMode=17 seq=37}
{ scale=1.0 imsi=724/31 loc=pt_BR touch=3 keys=2/1/1 nav=1/1 orien=2 layout=17 uiMode=17 seq=38}
Run Code Online (Sandbox Code Playgroud)

怎么可以避免呢?我不希望锁定屏幕破坏我的活动!

thi*_*olr 11

解决方案是添加

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

在你的<activity>元素AndroidManifest.xml.

  • 如果您的目标是API级别13或更高级别,则需要安装android:configChanges ="orientation | screenSize".请注意,如果你的minsdk小于13,它将无法识别"screenSize",因此唯一的选择是将目标SDK减少到与你的min相同.这很烦人,因为它迫使你的应用在屏幕边缘有一个软件菜单栏. (2认同)