27

バックグラウンド タスクを発生させる多くのアクティビティがあります。バックグラウンド タスクがアクティビティでイベントを発生させることができるように、アクティビティはリスナー コールバックを実装したものとして自身を渡します。アクティビティは、UI に何かを表示して、バックグラウンド アクティビティが成功したか失敗したかを示すことができます。

別の方法として、EventBusを使用して Activity をリスナー/サブスクライバーとして登録することもできます。バックグラウンド タスクが EventBus でイベントを発生させ、それをリッスンしているアクティビティがそれを処理できます。

他のものよりも優れている点は何ですか? いつどちらを使用しますか?(コードのクリーン度? パフォーマンス? 警告?)


フォローアップ - EventBus を使用することになりました。コードは間違いなくずっときれいになり、コールバックがあちこちにぶら下がっていません。IDE (IntelliJ) はメソッドが使用されていないと考えているonEventため、アノテーションを作成しました

@Target({ElementType.METHOD})
public @interface EventBusHook {}

onEventそしてそれを私の方法の上に置きました。次に、Alt+クリックして、IntelliJに未使用として扱わないように依頼しました。

@EventBusHook
public void onEvent(MyEventType myEventType){
4

4 に答える 4

26

EventBus を使用する利点:

  • あなたのコードはよりきれいに見えます
  • コードがモジュール化され、コードのテスト ケースを簡単に作成できるようになります。
  • オブジェクトをロックし、ガベージ コレクターがオブジェクトをクリーンアップできないようにする不正なオブジェクト参照によるメモリ リークを回避します。
  • 一度に複数の受信機を持つことができ、放送のように
  • 複数のインターフェイスを単一の EventBus に簡素化
  • インターフェイス クラスでは、継承されるクラス内のすべてのメソッドをオーバーライドする必要があります。EventBus を使用すると、本当に必要なイベントだけをリッスンできます

しかし、悪い点は、IDE がオートコンプリートを支援できなかったので、関数宣言で少し頭痛がするかもしれないということです。

私の提案は、カスタム リスナーを作成する必要がある場合は、EventBus を検討してください。要件/ケースのほとんど (すべてではないにしても) に適している可能性があります。

とにかく、結局のところ、それはすべてあなたの選択です=)

于 2015-03-12T11:32:17.030 に答える