我将所有活动都从我的BaseActivity继承。它已经工作了一年。现在,在我将Nexus S升级到4.0.3之后,我的应用程序停止了工作 - 我得到了无限循环,看起来像这样:
12-28 20:09:22.285: DEBUG/IDATT.HomeActivity(24662): onCreate
12-28 20:09:22.285: DEBUG/IDATT.BaseActivity(24662): onCreate
12-28 20:09:22.442: DEBUG/IDATT.HomeActivity(24662): onResume
12-28 20:09:22.442: DEBUG/IDATT.BaseActivity(24662): onResume
12-28 20:09:22.578: DEBUG/IDATT.HomeActivity(24662): onCreate
12-28 20:09:22.578: DEBUG/IDATT.BaseActivity(24662): onCreate
12-28 20:09:22.653: DEBUG/IDATT.HomeActivity(24662): onResume
12-28 20:09:22.653: DEBUG/IDATT.BaseActivity(24662): onResume
12-28 20:09:22.785: DEBUG/IDATT.HomeActivity(24662): onCreate
12-28 20:09:22.785: DEBUG/IDATT.BaseActivity(24662): onCreate
12-28 20:09:22.863: DEBUG/IDATT.HomeActivity(24662): onResume
12-28 20:09:22.863: DEBUG/IDATT.BaseActivity(24662): onResume
因此,当HomeActivity
启动时,它调用base.onCreate,这是第二行。
然后onResume
调用,之后由于某种原因 - 再次调用BaseActivity.onCreate。
这有意义吗?我注意到的一件事是,一切都运行正常,直到我转动屏幕。然后它开始闪烁。即使我点击Home并再次打开应用程序。但是如果我杀了进程并重新启动它看起来很好,直到我再次尝试翻转屏幕..
编辑:我删除了所有代码示例 - 它们不相关。
好像我发现了我的问题。我在onConfigurationChange
Application
@Override
public void onConfigurationChanged(Configuration newConfig)
{
Log.d(LOG_TAG, "onConfigurationChanged");
super.onConfigurationChanged(newConfig);
//reset locale to our defined locale in settings
// String l = Preferences.getLocale(getApplicationContext());
// Locale locale = new Locale(l);
// if (!l.equals(""))
// {
// newConfig.locale = locale;
// Locale.setDefault(locale);
// getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
// }
}
注释代码导致问题。似乎做我做的事情(改变语言环境)导致整个UI重新启动,并且它反复进行。现在我需要提出更好的方法。
因此,4.0中此区域设置区域发生了重大变化
答案 0 :(得分:2)
尝试编辑AndroidManifest.xml并为所有活动添加android:configChanges =“locale”。它可以解决重新创建的问题。
答案 1 :(得分:0)
android:configChanges =“locale”为我带来了一些真正的痛苦。我得到了一个无休止的暂停/恢复循环,但仅限于preics设备,并且只有在我下载了用于软糖的sdks之后。