我的ViewModel
类实现了LifecycleObserver
。当我调用fragment.lifecycle.addObserver(this)
时,会产生异常。
导致原因:java.lang.IllegalArgumentException:观察器类具有使用当前操作系统版本中不可用的较新API的某些方法。 生命周期甚至无法访问其他方法,因此您应确保您的观察器类仅访问在min API级别中可用的框架类,或使用lifecycle:compiler注释处理器。
奇怪的是,它一开始是正常工作的,但不久前出现了这个异常。我发现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")
}
有人知道如何修复吗?
更新
尝试使用annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
,但出现编译错误:
(决定粘贴屏幕截图,因为整个日志非常大)
更新2
最终我决定删除audioFocusRequest
字段,并使用旧的弃用方法-requestAudioFocus(OnAudioFocusChangeListener l, int streamType, int durationHint)
,而不是推荐的requestAudioFocus(@NonNull AudioFocusRequest focusRequest)
这帮助我使代码再次工作,所以这可能是解决方案。但我没有找到答案-为什么会出现这个问题。这很奇怪,因为代码之前可以工作。
因此问题已经解决,但问题仍然未得到解答。