我有一个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会发生这种情况。
我正在使用android.arch.lifecycle:extensions:1.1.1
。
有人可以帮我这个吗?
显然,三星设备上存在一些错误,反射失败,但偶尔会出现错误。
我在谷歌问题跟踪器上发布了这个并得到了以下答案:
https://issuetracker.google.com/issues/124584380
解决方案是迁移到Java 1.8 / Kotlin
并使用内部不使用反射的DefaultLifecycleObserver
。
还没有尝试过这个解决方案。如果有效则会发布。