我观察到我的应用程序的用户中出现了一些崩溃,这与配置更改和正在重新创建的活动有关,我无法重现它。问题似乎出在 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 问题跟踪器上打开错误报告将毫无用处。有谁知道这里发生了什么吗?以前有人遇到过这种情况吗?
显然存在一个错误,因为负责将null
值传递给Configuration#setTo(Configuration)
的 ActivityThread#createNewConfigAndUpdateIfNotNull(Configuration, Configuration)
方法将其第一个参数注释为 @NonNull
。
崩溃主要发生在Android 7.1.1上,该应用程序针对SDK 28。
此问题仅发生在 android 7.0 及更高版本...当使用夜间模式创建应用程序并且屏幕旋转(配置更改(时,可能是日夜主题中的错误。
我在 android 7.1 上也有这个问题,但我发现我的活动创建了两次因为setTheme(R.style.custom_style)
在修复此问题时super.onCreate(savedInstanceState)
后调用,因此在配置更改时不再发生崩溃
希望这个帮助
我对这个问题做了很多研究,我注意到这个问题只发生在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);
}
我的问题已通过添加上述代码解决我希望这个解决方案有所帮助。