我相信在 Android 的方向处理中偶然发现了一个固有的故障。
我有一个活动 A
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
没有传感器意味着 Activity A 不会受到物理设备旋转的影响。
我还有一个活动 B,它有一个被覆盖的 onSaveInstanceBundle
/*Will be called before orientation change*/
@Override
protected void onSaveInstanceState(Bundle currentState) {
super.onSaveInstanceState(currentState);
currentState.putBoolean(ApplicationConstants.Messages.ORIENTATION_CHANGED , true);
currentState.putBoolean("RESTART", true);
currentState.putString(ApplicationConstants.Messages.CURRENT_LANGUAGE,currentLocale);
}
onSaveInstance 总是在屏幕方向改变时被调用。和A一样,B在onCreate()下也有如下
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
现在难题来了。
我从 A 按下一个按钮,该按钮被编程为在我将设备保持在正常纵向模式时调用 B。我有一个断点附加到 onSaveInstance
正如预期的那样,调用 B 时不会调用 onSaveInstance
然而,这是一个奇怪的事实。如果我将设备保持在横向模式,然后调用 B,则调用 B 的 onSaveInstance,由于程序在断点处暂停,我们可以看到设备屏幕已横向。
因此,即使我对活动没有 SENSOR 参数,传感器实际上仍在工作。并且在活动切换之间,如果在我们以横向方式持有设备时完成,则目标活动以横向方式开始。在我放开断点后,B 恢复为纵向视图。
关于为什么这会影响我正在开发的项目,我有一个很长的故事。我想知道是否有人对这种情况有任何见解。
总结一下,我的问题是:
是不是真的在Activity切换时,Android系统会忽略指定的方向,默认使用设备的物理位置?我无法在 androidManifest 中设置方向。我注意到如果我们将定向模式放在清单中,情况并非如此。