据我了解,如果您将 'android:configChanges="orientation"' 插入清单中的活动,则该活动不会在方向更改时被销毁和重新创建。为了测试这一点,我创建了一个非常简单的应用程序,它什么也不做。然后我在清单中插入了 'android:configChanges="orientation"'。然后我添加了以下方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
Log.v(TAG,"onConfigurationChanged:");
super.onConfigurationChanged(newConfig);
}
Run Code Online (Sandbox Code Playgroud)
但是,我仍然看到 onCreate() 被调用。活动仍在重新创建。
好像这还不够奇怪,当我将模拟器置于横向模式 (Ctrl-F11) 时,我没有看到 onConfigurationChanged() 被调用。只有当我回到纵向模式时才会调用它。不应该双向调用吗?当我进入横向和纵向模式时,配置(方向)不会改变吗?这没有任何意义。
无论如何,这整个活动和方向的事情让我发疯。
但是,我仍然看到 onCreate() 被调用。该活动仍在重新创建中。
该模拟器模拟带有侧滑键盘的设备。与 - 匹配的值android:configChanges是keyboardHidden,通常与 一起使用orientation来处理非键盘设备(例如,android:configChanges="keyboardHidden|orientation")。
话虽这么说,android:configChanges但在大多数情况下并不推荐。使用动态片段 和setRetainInstance(true),或使用onSaveInstanceState()和onRetainNonConfigurationInstance()来允许活动被销毁和重新创建。