Java 做绿色机器人';s和番石榴';s EventBus使用反射?

Java 做绿色机器人';s和番石榴';s EventBus使用反射?,java,reflection,event-bus,otto,greenrobot-eventbus,Java,Reflection,Event Bus,Otto,Greenrobot Eventbus,我们的Android应用程序目前使用Otto EventBus,它使用反射。我们希望避免反射的开销,但保持灵活性。 是否使用反射?那你的呢 如果他们不这样做,他们会使用代码生成或类似的东西?奥托从来没有像GreenRobot的EventBus那样功能丰富——例如,没有线程模式,所以这是一个很好的摆脱。Otto不赞成使用RxJava,这对于许多项目来说都是大材小用(个人观点) 但是为了减少反射的使用,而不是运行时反射 索引前提条件:请注意,只有订阅服务器和事件类是公共的@Subscribe

我们的Android应用程序目前使用Otto EventBus,它使用反射。我们希望避免反射的开销,但保持灵活性。 是否使用反射?那你的呢


如果他们不这样做,他们会使用代码生成或类似的东西?

奥托从来没有像GreenRobot的EventBus那样功能丰富——例如,没有线程模式,所以这是一个很好的摆脱。Otto不赞成使用RxJava,这对于许多项目来说都是大材小用(个人观点)



但是为了减少反射的使用,而不是运行时反射


索引前提条件:请注意,只有订阅服务器和事件类是公共的@Subscriber方法才能被索引。此外,由于Java注释处理本身的技术限制,@Subscribe注释在匿名类中无法识别


GreenRobot EventBus3使用APT而不是反射,“我们希望避免反射的开销”您确定这实际上是您的应用程序中的一个问题吗?4年前,当我们(Square)将奥托(Otto)生成的代码原型化时,订阅者的数量必须是可笑的,它才能产生任何实际的差异。那是在Dalvik时代,也是在他们修复API 14+上的注释反射之前。坦率地说,像这样的评论往往是优化某些事实上不是问题、也没有被准确测量的东西的结果。@Jake Wharton我们没有测量它。根据经验,我希望在优化性能时避免反射。如果你有任何数据可以分享,我很乐意改变主意。不幸的是,这些数据已经丢失多年了。我要说的是,布局膨胀的反射比Otto要多10-100倍。我们实际上在UI中使用React Native(它有自己的性能开销)。但一般来说,大多数代码都是在后台的服务上运行的,因此这里不需要考虑UI的缓慢性。
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();