这是Android的惯用之一,当应用程序/活动处于横向模式时屏幕被锁定后,它将被销毁并重新创建,尽管用户通常会将设备保持在相同位置并且将在短时间后解锁。在这种情况下,再次解锁屏幕后,活动(由Android设置为纵向模式)将被破坏并再次以横向模式重新创建。这就是用户体验在横向模式下令人讨厌的原因。为什么做出这个决定?如果用户更改了设备方向,则在解锁后对此更改做出反应就足够了。
关于资源,这也是一个坏主意。例如,在相机应用程序中,只要屏幕被锁定,我就不希望重新初始化相机。对于任何UI来说,这都是一种很好的做法。
我目前的解决方案如下:
public class CameraActivity extends Activity {
private boolean screenWasLocked;
public boolean isScreenLocked() {
KeyguardManager myKM = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
return myKM.inKeyguardRestrictedInputMode();
}
protected void create() {
setContentView(R.layout.activity_main);
// ...
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isScreenLocked()) return;
create();
}
@Override
protected void onResume() {
super.onResume();
if (isScreenLocked()) {
screenWasLocked = true;
return;
}
else if (screenWasLocked) {
screenWasLocked = false;
create();
}
// ...
}
// Things you do here must accept that logic in create()/onResume() probably wasn't executed
@Override
protected void onPause() {
// ...
super.onPause();
}
}
你能建议我一个更好的吗?
答案 0 :(得分:0)
这种用途。
<activity android:name="variables.App.Splash"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|uiMode"
android:screenOrientation="portrait">
并添加到活动
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}