获取 java.lang.NoSuchFieldException:Android Arch 生命周期的 ON_START
Posted
技术标签:
【中文标题】获取 java.lang.NoSuchFieldException:Android Arch 生命周期的 ON_START【英文标题】:Getting java.lang.NoSuchFieldException: ON_START for Android Arch Lifecycle 【发布时间】:2019-02-15 06:28:43 【问题描述】:我有一个 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
。
有人可以帮我解决这个问题吗?
【问题讨论】:
您使用的是哪个版本的生命周期?添加带有问题的依赖项。 我正在使用1.1.1
进行拱形生命周期。
【参考方案1】:
显然,在三星设备上存在一些反射失败的错误,但非常偶尔。
我在谷歌问题跟踪器上发布了这个并得到了以下答案:
https://issuetracker.google.com/issues/124584380
解决办法是迁移到Java 1.8 / Kotlin
,使用内部不使用反射的DefaultLifecycleObserver
。
尚未尝试此解决方案。有没有效果都会发。
【讨论】:
以上是关于获取 java.lang.NoSuchFieldException:Android Arch 生命周期的 ON_START的主要内容,如果未能解决你的问题,请参考以下文章