首页 > 解决方案 > LifecycleObserver 使用使用较新 API 的方法产生异常

问题描述

我的ViewModel班级实现LifecycleObserver. 当我调用fragment.lifecycle.addObserver(this)它时会产生异常。

原因:java.lang.IllegalArgumentException:观察者类有一些使用较新 API 的方法,这些方法在当前操作系统版本中不可用。生命周期甚至无法访问其他方法,因此您应该确保您的观察者类仅访问您的最低 API 级别中可用的框架类或使用生命周期:编译器注释处理器。

奇怪,首先它工作正常,但不久前出现了这个异常。我发现,这audioFocusRequest就是这个错误的原因。

private val audioFocusRequest by lazy {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
        .setOnAudioFocusChangeListener(this)
        .build() else throw RuntimeException("Can't be done for Android API lower than 26")
}

有人知道如何修复吗?

UPD

尝试使用annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version",但编译错误:( 在此处输入图像描述 决定粘贴截图,因为整个日志很大)

UPD 2
最后我决定删除audioFocusRequest字段并使用旧的不推荐使用的方法 -requestAudioFocus(OnAudioFocusChangeListener l, int streamType, int durationHint)而不是推荐的requestAudioFocus(@NonNull AudioFocusRequest focusRequest)

它帮助我使代码再次工作,因此它可以成为解决方案。但我没有找到答案 - 为什么会出现这个问题。这很奇怪,因为代码以前可以工作。

所以问题已经解决了,但问题仍然没有得到解答

标签: androidkotlinandroid-lifecyclefragment-lifecycle

解决方案


尝试使用kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"


推荐阅读