GreenRobot和Guava的EventBus使用反射吗?

时间:2016-11-22 13:37:16

标签: java reflection event-bus otto greenrobot-eventbus

我们的Android应用目前使用的是使用反射的Otto EventBus。我们希望避免反射的开销,但保持灵活性。 Guava's event bus使用反射吗?那么GreenRobot'

如果他们没有使用代码生成或类似的东西?

1 个答案:

答案 0 :(得分:4)

奥托从来没有像GreenRobot的EventBus那样功能丰富 - 例如,没有线程模式,所以这是很好的解决方案。并且Otto被弃用以支持RxJava--这对于许多项目(个人意见)来说是一个大规模的过度杀伤。

但是为了减少反射的使用,GreenRobot EventBus 3.x is able to build an index in compilation time using APT而不是运行时反射。

http://greenrobot.org/eventbus/documentation/subscriber-index/

  

索引前提条件:请注意,只有@Subscriber方法可以为订阅者和事件类公开编制索引。此外,由于Java注释处理本身的技术限制,@ Subscribe注释在匿名类中无法识别。

buildscript {
    dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}



apply plugin: 'com.neenbedankt.android-apt'

dependencies {
    compile 'org.greenrobot:eventbus:3.0.0'
    apt 'org.greenrobot:eventbus-annotation-processor:3.0.1'
}

apt {
    arguments {
        eventBusIndex "com.example.myapp.MyEventBusIndex"
    }
}
  

EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();
// Now the default instance uses the given index. Use it like this:
EventBus eventBus = EventBus.getDefault();