Google Play Vitals 报告了在运行 Android 8.0 和 8.1 的 Android 设备上发生的崩溃,这些设备具有类似的结构:
java.lang.RuntimeException:
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:5743)
at android.app.ActivityThread.-wrap1 (Unknown Source)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1656)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:164)
at android.app.ActivityThread.main (ActivityThread.java:6494)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)
Caused by: java.lang.IllegalStateException:
at android.app.ContextImpl.getSharedPreferences (ContextImpl.java:387)
at android.app.ContextImpl.getSharedPreferences (ContextImpl.java:372)
at android.content.ContextWrapper.getSharedPreferences (ContextWrapper.java:167)
at foo.bar.core.data.UserPreferences.<init> (UserPreferences.java:11)
at foo.bar.android.core.di.AppModule.a (AppModule.java:7)
at foo.bar.android.core.di.AppModule_ProvideUserPreferencesFactory.a (AppModule_ProvideUserPreferencesFactory.java:10)
at foo.bar.android.core.di.AppModule_ProvideUserPreferencesFactory.get (AppModule_ProvideUserPreferencesFactory.java)
at dagger.internal.DoubleCheck.get (DoubleCheck.java:15)
at foo.bar.android.core.di.DaggerAppComponent.n (DaggerAppComponent.java:2)
at foo.bar.android.Application.d (FooApplication.java:9)
奇怪的是,我创建的SharedPreferences
方式非常简单:
private val userPreferences: SharedPreferences = context.getSharedPreferences(USER_PREFS_FILE_NAME, Context.MODE_PRIVATE)
另一个奇怪的事情是我在 Android 8.1 上并且我没有注意到任何崩溃,而 Play Vitals 报告它们发生在与我一直使用的设备完全相同的设备上:Pixel 2 XL,Android 8.1(还有其他有该问题的设备)。
我是否错过了SharedPreferences
Android 8.0 中引入的一些明显变化(崩溃发生在 8.0 和 8.1 上,但大约 96% 的崩溃发生在 8.1 上)?