GreenRobot EventBus 订阅基于 API 级别
GreenRobot EventBus subscribe based on API level
我正在尝试订阅 EventBus 事件。由于父 class 不存在于 API 级别 23 及以下,我处于需要有条件地订阅所述事件的情况。
我意识到,通过使用构建变体,可以解决这个问题,但我很好奇是否有更优雅的解决方案。 @RequiresApi
注释似乎没有任何效果(也许堆叠注释没有按照我期望的方式工作)。
一些简化的示例代码:
class MyClass : OtherClass() {
@Subscribe(threadMode = ThreadMode.MAIN)
fun onSomeEvent(someEvent: SomeEvent) {
// do some stuff
}
}
假设 OtherClass()
仅在 API 级别 24+ 中可用,在 Dalvik 或 ART 意识到生成的EventBusIndex
引用了损坏的 class.
您可以尝试稍微调整 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
实例本身。
我正在尝试订阅 EventBus 事件。由于父 class 不存在于 API 级别 23 及以下,我处于需要有条件地订阅所述事件的情况。
我意识到,通过使用构建变体,可以解决这个问题,但我很好奇是否有更优雅的解决方案。 @RequiresApi
注释似乎没有任何效果(也许堆叠注释没有按照我期望的方式工作)。
一些简化的示例代码:
class MyClass : OtherClass() {
@Subscribe(threadMode = ThreadMode.MAIN)
fun onSomeEvent(someEvent: SomeEvent) {
// do some stuff
}
}
假设 OtherClass()
仅在 API 级别 24+ 中可用,在 Dalvik 或 ART 意识到生成的EventBusIndex
引用了损坏的 class.
您可以尝试稍微调整 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
实例本身。