【问题标题】:Crash when resuming Activity due to NPE由于 NPE,恢复 Activity 时崩溃
【发布时间】:2019-07-14 09:46:21
【问题描述】:

我观察到我的应用程序用户之间发生了一些与配置更改和重新创建的 Activity 有关的崩溃,但我无法重现它。这个问题似乎在 Android 类中,因此我没有机会直接修复它。

Fatal Exception: java.lang.NullPointerException: Attempt to read from field 'float android.content.res.Configuration.fontScale' on a null object reference
       at android.content.res.Configuration.setTo + 904(Configuration.java:904)
       at android.content.res.Configuration.(Configuration.java:891)
       at android.app.ActivityThread.createNewConfigAndUpdateIfNotNull + 5133(ActivityThread.java:5133)
       at android.app.ActivityThread.performConfigurationChanged + 5203(ActivityThread.java:5203)
       at android.app.ActivityThread.performConfigurationChangedForActivity + 5117(ActivityThread.java:5117)
       at android.app.ActivityThread.handleResumeActivity + 3994(ActivityThread.java:3994)
       at android.app.ActivityThread.handleLaunchActivity + 3070(ActivityThread.java:3070)
       at android.app.ActivityThread.handleRelaunchActivity + 5006(ActivityThread.java:5006)
       at android.app.ActivityThread.-wrap21(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage + 1665(ActivityThread.java:1665)
       at android.os.Handler.dispatchMessage + 102(Handler.java:102)
       at android.os.Looper.loop + 154(Looper.java:154)
       at android.app.ActivityThread.main + 6816(ActivityThread.java:6816)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run + 1563(ZygoteInit.java:1563)
       at com.android.internal.os.ZygoteInit.main + 1451(ZygoteInit.java:1451)

由于我无法重新创建它,因此在 Goggle issuetracker 上打开错误报告将毫无用处。有没有人知道这里发生了什么?有没有人遇到过这种情况?

显然存在一个错误,因为负责将null 值传递给Configuration#setTo(Configuration)ActivityThread#createNewConfigAndUpdateIfNotNull(Configuration, Configuration) 方法的第一个参数注释为@NonNull

崩溃主要发生在 Android 7.1.1 上,应用针对 SDK 28。

【问题讨论】:

  • 您是否偶然使用了自定义字体?
  • @a_local_nobody nope
  • 你能弄清楚为什么会发生这种情况吗?当我在 MainActivity 中更改方向时,它在 Android 7.0 上发生在我身上。 Android 5.1.1 没有问题。此外,它仅在应用程序在创建时处于夜间模式时才会发生。 github.com/kebiro/TriviaQuiz
  • @Beko 不,我没能解决它。

标签: java android onresume onconfigurationchanged


【解决方案1】:

此问题仅发生在 android 7.0 及以上版本...当应用程序使用夜间模式创建并旋转屏幕(配置更改)时,可能是 DayNight 主题中的错误。

【讨论】:

    【解决方案2】:

    我在 android 7.1 上也有这个问题,但我发现我的活动创建了两次 因为setTheme(R.style.custom_style)super.onCreate(savedInstanceState) 之后调用,当修复此问题时,配置更改不再发生崩溃

    希望有帮助

    【讨论】:

      【解决方案3】:

      我对这个问题做了很多研究,发现这个问题只发生在 Android 7 和 DayNight 主题中。 为了解决这个问题,Android 7 中不能使用 DayNight 主题,如以下代码:

       if (Build.VERSION.SDK_INT==Build.VERSION_CODES.N||Build.VERSION.SDK_INT==Build.VERSION_CODES.N_MR1){
                  AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
              }
      

      我的问题通过添加上面的代码解决了 我希望这个解决方案对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多