Попытка создать SharedPreferences не удалась в Oreo (8.1) - PullRequest
0 голосов
/ 21 мая 2018

Google Play Vitals сообщает о сбоях на устройствах Android под управлением Android 8.0 и 8.1, имеющих схожую структуру:

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 (есть и другие устройства с такой же проблемой)и 8.0 и 8.1, но ~ 96% аварий происходят на 8.1)?

...