据我了解,如果您在清单中的活动中插入'android:configChanges =“orientation”',活动将不会被销毁并在方向更改时重新创建。为了测试这个,我创建了一个简单易用的应用程序。然后我在清单中插入了'android:configChanges =“orientation”'。然后我添加了以下方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
Log.v(TAG,"onConfigurationChanged:");
super.onConfigurationChanged(newConfig);
}
但是,我仍然看到onCreate()被调用。活动仍在重建中。
好像这不够奇怪,当我将模拟器置于横向模式(Ctrl-F11)时,我看不到onConfigurationChanged()被调用。只有在我回到纵向模式时才会调用它。不应该双向被称为?当我进入横向和纵向模式时,配置(方向)是否被更改?这毫无意义。
无论如何,整个活动和定位事情让我发疯。
答案 0 :(得分:2)
您的屏幕尺寸从1200x800变为800x1200(例如)。
从API 13开始,这也会引发screenSize
配置更改。修复是:
android:configChanges="keyboardHidden|oritentation|screenSize"
答案 1 :(得分:0)
但是,我仍然看到onCreate()被调用。活动仍在重建中。
仿真器使用侧滑块键盘模拟设备。与您匹配的android:configChanges
值为keyboardHidden
,通常与orientation
一起用于处理非键盘设备(例如android:configChanges="keyboardHidden|orientation"
)。
话虽如此,但大多数情况下不推荐使用android:configChanges
。使用动态片段和setRetainInstance(true)
,或使用onSaveInstanceState()
和onRetainNonConfigurationInstance()
允许销毁和重新创建活动。