2016-12-06 8 views
0

私はイベントバスのlibを使用しようとしていますが、その機能を理解できず、複数の例があります。それはサービスクラスのみを使用するか、アクティビティとフラグメントを使用するか使用アクティビティかアクティビティまたはフラグメントでイベントバスをどのような状況で使用するか。androidのイベントバスライブラリの使い方

+0

が、私はあなたがSOチェックすべき – Android

+2

ことを使用している状況いけません[Greenrobot eventBus](http://stackoverflow.com/documentation/android/3551/greenrobot-eventbus#t=201612060424588957703)と[Otto eventbus](http://stackoverflow.com/documentation/android/6068/otto)のドキュメント-event-bus#t = 201612060425047440724)、[こちら](http://www.androidgig.com/eventbus-library-in-android/)リンク –

答えて

1

イベントの利点の1つは、オブジェクトを「どこか」に渡すことができ、オブジェクトがどこから取得されたかを知る必要がないことです。これにより、アクティビティやフラグメントの状態をコントローラクラスに簡単にプッシュし、このコントローラから送信されたイベントをアクティビティやフラグメントに戻すことが容易になります。

イベントのために、コントローラは、受信側がアクティビティかフラグメントかを知る必要はありません。これにより、一方のスイッチを他方のスイッチに切り替えることが非常に容易になる。一方、これはコントローラを他の場所に置くことも容易にします。最初にアプリケーションクラスのインスタンスとして持っていて、それをサービスに移動します。

私は上記のように、あなたは、Androidのライフサイクルに対処するためのイベントを使用する方法の非常に具体的な例で記事を書いた:私はちょうど概念を理解https://medium.com/@JuliusHuijnk/beating-the-android-life-cycle-d00a2f3ed88

+0

ありがとうbuddy.oneより多くの質問 - ユーザーからアプリケーションからログアウトすると、イベントバスから値が削除され、イベントバスから値を削除する方法 – Android

0

インターフェイスの代わりに、単にEventBusを使用できます.weは、あるクラスから1つ以上のクラスにメッセージを渡すことができます。

public static class MessageEvent { /* your getter and setter */ } 

は、加入者を準備します:あなたのサブスクライブ方法を宣言し、注釈を付け、必要に応じて指定3でEventBusは

  • 登録を定義して、イベントを定義
  • ポストイベント
  • の登録を解除

    • ステップスレッドモード:

      @Subscribe(threadMode = ThreadMode.MAIN) 
      public void onMessageEvent(MessageEvent event) { 
          /* event fire here when you post event from other class or fragment */ 
          }; 
      

      サブスクライバを登録および登録解除します。 Android上で例えば、活動およびフラグメントは通常、彼らのライフサイクルに応じて登録する必要があります:

      @Override 
      public void onStart() { 
      super.onStart(); 
      EventBus.getDefault().register(this);//Register 
      } 
      

      登録解除

      ​​

      ポストイベント:

      EventBus.getDefault().post(new MessageEvent());//post event 
      
    +0

    このイベントバスを使用する状況 – Android

    +0

    単純にイベントを使用する – sasikumar

    +0

    インターフェイス – Android

    1

    あなたは軽量な通信としてEventBusを考慮することができますアクティビティ、サービス、フラグメント、またはそれらの間のデータを渡すためのチャネル。

    EventBusをというアプリケーションの下位層と考えてください。アクティブなアクティビティ、サービス、フラグメント、およびライフサイクルとは関係ありません。

    How an EventBus works

    EventBusが働く上でのメインコンセプトは、あなたが活動またはその断片もしくはサービスまたはそのような任意のコンポーネントのいずれかのイベントに加入とEventBusはタイプの特定のイベントを持っている時はいつでもということですを購読すると、は、そのコンポーネントのサブスクライブされたメソッドに通知し、受け取ったイベントに基づいてそこでのタスクを実行できます。イベントのトリガ

    が簡単で、あなただけの特定のイベント渡すことによって、あなたのアプリケーションの任意の領域からそれを行うことができますEventBusに(基本的にPOJOクラスですを、のMyEventを言わせて)、およびバスの意志残りの部分を処理し、適切な受信機に正しく配送してください。

    GreenRobotのEventBus 3を試して、ライブラリのコードを組み込むことをお勧めします。私は問題なく同じものを使用しています。

    EventBus 3 by GreenRobot

    は、この情報がお役に立てば幸いです。

    2

    ほとんどの場合、そうしないでください。一般的には、あなたがあなたのプログラムを誤って設計したときのハックで、あなたのアプリがどのようにカプセル化されているか、どのレベルでどのオブジェクトが知られているかによって、あるポイントから別のポイントへデータを簡単に渡すことができません。実際のスパゲッティコードは、イベントが発生したときに実際に呼び出されるコードを特定することが難しい場合に発生します。イベントバスの周りにコードを書くべきではありません。正しい方法でリファクタリングすることができない場合は、最後の手段にしてください。

    +0

    私はこれが少し厳しいと思います。 Androidのフレームワークによって、いくつかのやりとりやカップリングが非常に困難になり、EventBusはこれらの欠点を妥当な方法で処理するのに役立ちます。それはあらゆる問題のための適切な解決策ではなく、あなたがその使用法について規律されていない場合は確かに混乱に陥るかもしれませんが、それが受け入れられないということや、あなたのアーキテクチャに欠陥があるという自動信号を意味するわけではありません。私はプロのアプリでEventBusをスパゲッティコードに変えずに使用しました。 – Karakuri

    +1

    私はその厳しいとは思わない。虐待の割合:イベントバスの実際の必要性は約10:1です。私がコード内のイベントバスを見ると、メンテナンス作業の時間見積もりが2倍になっています。 –

    +0

    @GabeSechanだから、基本的に、あなたはEventBusesが存在してはならないと言っている。 –

    関連する問題