获取 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的主要内容,如果未能解决你的问题,请参考以下文章

iOS ---------- 获取设备的各种信息

java反射获取属性值

Shell 获取路径

iOS 获取文件大小

根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期

js如何获取时间点?