【发布时间】:2011-12-29 01:58:58
【问题描述】:
我的所有活动都继承自我的 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 再次被调用。
这有意义吗?我注意到的一件事是,在我转动屏幕之前,一切都运行良好。然后它开始闪烁。即使我点击主页并再次打开应用程序。但是如果我终止进程并重新启动它看起来不错,直到我再次尝试翻转屏幕..
编辑:我删除了所有代码示例 - 它们不相关。
好像我发现了我的问题。我确实在我的Application 中覆盖了onConfigurationChange
@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 中此区域设置区域发生了重大变化
【问题讨论】:
-
显示您的
onCreate(...)和onResume()代码BasActivity和HomeActivity。 -
代码很多,我试着注释掉大部分没有变化..
-
我从未使用过
updateConfiguration(...),但这表明它会触发onConfigurationChanged(...)。不?如果是这样,那就是你的无限循环的来源。如果您将调用updateConfiguration(...)注释掉,取消注释其他行并将super.onConfigurationChanged(newConfig);移动到覆盖的onConfigurationChanged(...)方法的末尾,会发生什么情况。换句话说,在您修改newConfig以设置其语言环境后,最后调用它。 -
是的,这是有道理的。但是这个问题刚刚开始是4.0这个代码反正是不好的。我会尝试看看我是否可以完全摆脱它。
-
好的 - 抱歉,我帮不上忙。正如我所说,这不是我在自己的任何代码中所做的事情。祝你好运找到解决方案。
标签: android