恢复活动由于NPE而崩溃

时间:2019-07-14 09:46:21

标签: java android onresume onconfigurationchanged

我已经观察到我的应用程序用户中的一些崩溃,这与配置更改和正在重新创建的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上打开错误报告将毫无用处。有谁知道这里发生的事情吗?有人遇到过吗?

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

崩溃主要发生在Android 7.1.1上,该应用程序针对的是SDK 28。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我对此问题进行了大量研究,发现该问题仅出现在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);
        }

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

答案 2 :(得分:0)

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

希望获得帮助