android - 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)
它帮助我使代码再次工作,因此它可以成为解决方案。但我没有找到答案 - 为什么会出现这个问题。这很奇怪,因为代码以前可以工作。
所以问题已经解决了,但问题仍然没有得到解答
解决方案
尝试使用kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"
推荐阅读
- javascript - 获取请求在 html 中呈现未定义
- c# - 类型 T 的方法推断
- python - 我如何编写一个函数,它接受两个参数句子和单词,它返回相同单词的出现次数
- javascript - express.js(MYSQL)中的DELETE函数不删除行
- reactjs - 我很难为计时器编写 Jest 测试
- javascript - 即使预期和结果相同,使用 Mocha 测试 String.split() 也会失败
- sql - 为什么在 INSERT INTO 表语句中出现错误:“缺少列关键字”?
- bootstrap-4 - Responsiven't Jumbotron 背景图片
- notifications - Docker 中的 Fiware Orion Context Broker 2.2.0 - 一段时间后停止发送通知
- excel - 如何引用另一个工作表中的单元格?