我正在尝试订阅EventBus事件。由于API级别23及以下版本中不存在父类,因此我需要有条件地预订该事件。
我意识到,通过使用build变体,可以解决此问题,但是我很好奇是否存在更优雅的解决方案。 @RequiresApi
注释似乎没有任何作用(也许堆叠注释无法按我期望的方式工作)。
一些简化的示例代码:
class MyClass : OtherClass() {
@Subscribe(threadMode = ThreadMode.MAIN)
fun onSomeEvent(someEvent: SomeEvent) {
// do some stuff
}
}
假设
OtherClass()
仅在API级别24+中可用,则该应用程序将在Dalvik或ART意识到生成的EventBusIndex
引用了损坏的类后,立即在较低API级别的启动屏幕上挂起。 最佳答案
您可以尝试稍微调整MyClass
以将预订移至另一个对象:
class MyClass : OtherClass() {
val subber = Subber()
fun onSomeEventForRealz(someEvent: SomeEvent) {
// do some stuff
}
inner class Subber {
@Subscribe(threadMode = ThreadMode.MAIN)
fun onSomeEvent(someEvent: SomeEvent) = onSomeEventForRealz(someEvent)
}
}
您还需要调整
subscribe()
和unsubscribe()
调用以传递subber
而不是MyClass
实例本身。