仍然使用configChanges重新创建活动

时间:2012-01-16 17:00:54

标签: android

据我了解,如果您在清单中的活动中插入'android:configChanges =“orientation”',活动将不会被销毁并在方向更改时重新创建。为了测试这个,我创建了一个简单易用的应用程序。然后我在清单中插入了'android:configChanges =“orientation”'。然后我添加了以下方法:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    Log.v(TAG,"onConfigurationChanged:");
    super.onConfigurationChanged(newConfig);
}

但是,我仍然看到onCreate()被调用。活动仍在重建中。

好像这不够奇怪,当我将模拟器置于横向模式(Ctrl-F11)时,我看不到onConfigurationChanged()被调用。只有在我回到纵向模式时才会调用它。不应该双向被称为?当我进入横向和纵向模式时,配置(方向)是否被更改?这毫无意义。

无论如何,整个活动和定位事情让我发疯。

2 个答案:

答案 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()允许销毁和重新创建活动。