【问题标题】:Activity lifecycle issue - upgraded to 4.0.3活动生命周期问题 - 升级到 4.0.3
【发布时间】: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() 代码BasActivityHomeActivity
  • 代码很多,我试着注释掉大部分没有变化..
  • 我从未使用过updateConfiguration(...),但这表明它会触发onConfigurationChanged(...)。不?如果是这样,那就是你的无限循环的来源。如果您将调用 updateConfiguration(...) 注释掉,取消注释其他行并将 super.onConfigurationChanged(newConfig); 移动到覆盖的 onConfigurationChanged(...) 方法的末尾,会发生什么情况。换句话说,在您修改newConfig 以设置其语言环境后,最后调用它。
  • 是的,这是有道理的。但是这个问题刚刚开始是4.0这个代码反正是不好的。我会尝试看看我是否可以完全摆脱它。
  • 好的 - 抱歉,我帮不上忙。正如我所说,这不是我在自己的任何代码中所做的事情。祝你好运找到解决方案。

标签: android


【解决方案1】:

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

【讨论】:

【解决方案2】:

android:configChanges="locale" 为我节省了一些真正的痛苦。我得到了一个无休止的暂停/恢复循环,但仅在 pre ics 设备上,并且只有在我下载了 jellybean 的 sdks 之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2013-01-13
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多