获取java.lang.NoSuchFieldException:ON_START for Android Arch Lifecycle

问题描述 投票:0回答:1

我有一个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

有人可以帮我这个吗?

java android android-lifecycle android-library application-lifecycle
1个回答
0
投票

显然,三星设备上存在一些错误,反射失败,但偶尔会出现错误。

我在谷歌问题跟踪器上发布了这个并得到了以下答案:

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

解决方案是迁移到Java 1.8 / Kotlin并使用内部不使用反射的DefaultLifecycleObserver

还没有尝试过这个解决方案。如果有效则会发布。

© www.soinside.com 2019 - 2024. All rights reserved.