我有一个简单的 android 应用程序,为 API 级别 7 构建。唯一不常见的是它的清单中有 android:screenOrientation="portrait"。同样在其清单中,API 级别被指定为 android:targetSdkVersion="11" android:minSdkVersion="7"。
它在 API 级别 8 的 AVD 上按预期工作,但是当在 API 级别 11 的 AVD 中运行时,我发现它的主要活动的 onCreate() 在启动时运行了两次。我唯一想到的是发生了配置更改,因此我输入了以下行:
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|导航|方向|screenLayout|fontScale"
在清单中还有以下几行:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
进入主要活动并在 super... 行上放置一个断点。当我调试(使用 Eclipse/ADT)时,它会在那条线上中断。
我不知道如何找出配置中的哪些内容发生了变化。
在 API 级别 11 的 AVD 中,屏幕在应用程序启动之前处于横向模式,但当应用程序运行时,我猜它处于纵向模式,因为它的顶部位于左侧。
在 API 级别 8 的 AVD 中,主要活动不会遇到此断点,并且 onCreate() 仅调用一次。
现在,如果我更改为 android:screenOrientation="landscape",则两个 AVD 都不会由于配置更改而导致中断,因此 onCreate() 只运行一次。如果 API 级别 8 上的 AVD 在此设置下会遇到断点,那么至少两个 AVD 的行为会相似。
有没有人看到这个,我认为这是 API 级别 11 的 AVD 的奇怪行为,也许有线索?
我还发现这个简单应用程序的另一个活动,用于设置首选项,显示为横向模式,当从首选项屏幕/活动返回到主活动时,主活动以 onCreate() 重新开始,所以看起来主要活动受到另一个配置更改的影响。当我在清单中将首选项活动指定为纵向模式时,第二个问题就消失了。
简