我的ViewModel
类实现了LifecycleObserver
。
当我致电fragment.lifecycle.addObserver(this)
时会产生异常。
原因:java.lang.IllegalArgumentException:该观察器类具有一些使用较新API的方法,这些API在当前OS版本中不可用。生命周期甚至无法访问其他方法,因此您应确保观察者类仅访问最小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")
}
有人知道如何解决吗?
UPD
试图使用annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
,但出现编译错误:
(决定粘贴屏幕截图,因为整个日志都很大)
答案 0 :(得分:0)
尝试使用kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"
答案 1 :(得分:0)
实现LifecycleObserver
的类具有某种方法,该方法具有类型为参数的参数,仅适用于高级API。
您的变量(我猜)和函数参数必须在所有API上都存在,即使函数没有被调用(也许这是实现LifecycleObserver
的类的要求)。
可能的解决方案是将函数参数类型更改为Any
(kotlin)或Object
(Java),并将其强制转换为函数内部的适当类型。
答案 2 :(得分:0)
我必须在SpinnerView上删除此set方法:lifecycleOwner = viewLifecycleOwner
答案 3 :(得分:0)
我可以通过将有问题的方法移到另一个类中来解决此问题,但是仍然可以从LifecycleObserver中调用它。再次阅读错误消息后:
原因:java.lang.IllegalArgumentException:该观察器类具有一些使用较新API的方法,这些API在当前OS版本中不可用。生命周期甚至无法访问其他方法,因此您应确保观察者类仅访问最小API级别中可用的框架类,或使用lifecycle:compiler注释处理器。
即使设备操作系统中不存在扩展LifecycleObserver
的类中的方法或对象,即使它们包装在SDK版本检查中并且从未访问过,也似乎不允许这些方法或对象。