Получение java.lang.NoSuchFieldException: ON_START для Android Arch Жизненный цикл
У меня есть библиотека для 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
,
Может кто-нибудь помочь мне с этим?
0 ответов
Очевидно, на устройствах Samsung есть какая-то ошибка, отражение которой не удается, хотя и очень редко.
Я разместил это в системе отслеживания проблем Google и получил ответ ниже:
https://issuetracker.google.com/issues/124584380
Решение состоит в том, чтобы перейти на Java 1.8 / Kotlin
и использовать DefaultLifecycleObserver
что внутренне не использует отражения.
Еще не пробовали это решение. Выложу, если сработало или нет.