活动生命周期问题 - 升级到4.0.3

时间:2011-12-29 01:58:59

标签: android

我将所有活动都从我的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中此区域设置区域发生了重大变化

2 个答案:

答案 0 :(得分:2)

尝试编辑AndroidManifest.xml并为所有活动添加android:configChanges =“locale”。它可以解决重新创建的问题。

答案 1 :(得分:0)

android:configChanges =“locale”为我带来了一些真正的痛苦。我得到了一个无休止的暂停/恢复循环,但仅限于preics设备,并且只有在我下载了用于软糖的sdks之后。