Получение java.lang.NoSuchFieldException: ON_START для Android Arch Жизненный цикл - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть библиотека для SDK, которая расширяет оба Application.ActivityLifecycleCallbacks, LifecycleObserver.В конструкторе я регистрирую класс в качестве наблюдателя для ProcessLifecycleOwner.

ProcessLifecycleOwner.get().getLifecycle().addObserver(this);

Для метода, который работает ON_START , я добавил следующую аннотациюдля того же самого.

@OnLifecycleEvent(Lifecycle.Event.ON_START)

Это прекрасно работает в локальной среде и среде тестирования.Даже для релизной версии все работает нормально.Но очень редко это терпит неудачу со следующей ошибкой:

Caused by java.lang.NoSuchFieldException: ON_START
   at java.lang.Class.getDeclaredField(Class.java:929)
   at libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:685)
   at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:663)
   at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:641)
   at libcore.reflect.AnnotationAccess.getDeclaredAnnotation(AnnotationAccess.java:170)
   at java.lang.reflect.Method.getAnnotation(Method.java:301)
   at android.arch.lifecycle.ClassesInfoCache.createInfo(SourceFile:124)
   at android.arch.lifecycle.ClassesInfoCache.hasLifecycleMethods(SourceFile:59)
   at android.arch.lifecycle.Lifecycling.resolveObserverCallbackType(SourceFile:137)
   at android.arch.lifecycle.Lifecycling.getObserverConstructorType(SourceFile:119)
   at android.arch.lifecycle.Lifecycling.getCallback(SourceFile:57)
   at android.arch.lifecycle.LifecycleRegistry$ObserverWithState.<init>(SourceFile:347)
   at android.arch.lifecycle.LifecycleRegistry.addObserver(SourceFile:162)

Эта ошибка очень редка.Я видел это только для Android 5.0, 5.0.1 и 5.0.2 на устройстве Samsung.

Я использую android.arch.lifecycle:extensions:1.1.1.

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 07 марта 2019

Очевидно, что на устройствах Samsung есть ошибка, из-за которой отражение не срабатывает, хотя и очень редко.

Я разместил это в системе отслеживания проблем Google и получил ответ ниже:

https://issuetracker.google.com/issues/124584380

Решение состоит в том, чтобы перейти на Java 1.8 / Kotlin и использовать DefaultLifecycleObserver, который внутренне не использует отражение.

Еще не пробовал это решение.Будет ли публиковать, если это работает или нет.

...