2016-11-22 12 views
2

私たちのAndroidアプリは現在、反射を使用するOtto EventBusを使用しています。我々は、反射のオーバーヘッドを避けたいが、柔軟性を保つ。 Guava's event busは反射を使用していますか? GreenRobotさんは?GreenRobotとGuavaのEventBusは反射を使用していますか?

そうでない場合は、コード生成などを使用しますか?

+0

GreenRobot EventBus3ではなく、反射のAPT使用

EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus(); // Now the default instance uses the given index. Use it like this: EventBus eventBus = EventBus.getDefault(); 
、私の知る限りで – EpicPandaForce

+1

あなたは "私たちは、反射のオーバーヘッドを回避したいです"これは実際にはyの問題であることを確かめてください私たちのアプリですか?私たち(Square)が4年前にOttoを生成したコードのプロトタイプを作成したとき、加入者の数は実際の違いを生み出すには馬鹿げていなければなりませんでした。それがDalvikの時代に戻ってきたばかりでなく、API 14+でアノテーションの反映が修正される前のことです。このようなコメントは、実際に問題ではなく、正確に測定されていないものを最適化した結果であることがよくあります。 –

+0

@Jake Wharton私たちはそれを測定していません。経験則として、私はパフォーマンスを最適化したいときに反射を避けるつもりです。あなたが共有できるデータがあれば、私は心を変えてうれしいです。 – Ginandi

答えて

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" 
    } 
} 

そして

関連する問題