19

状態の変更 (接続、切断、onServiceDiscoverd、onCharacteristicChange など) を処理し、gatt サーバーを介して別のデバイスからデータを受信するサービスを実装しました。

私の質問は、Greenrobot Eventbusを使用して、サービスとアクティビティの間のブロードキャスト レシーバーを置き換えて、イベントを効率的に処理できますか?

4

3 に答える 3

16

LocalBroadcastManager とは異なり、EventBus はより簡単に使用できます。次の 3 つの手順を実行するだけです。

1- イベント クラスを作成します。アクションが発生したときの応答を表す単純な Java クラス。

2-Activity onCreateメソッドでイベントバスをサブスクライバーとして登録します

  EventBus.getDefault().register(this);

もちろん、Activity onDestroy メソッドで登録を解除します。

 EventBus.getDefault().unregister(this);

3- サブスクライブ メソッドは、EventBus に登録したのと同じアクティビティで作成されます。WorkOrderActivity の例

   @Subscribe
    public void onEvent(EventClass event)

イベントが発生したら、post メソッドを呼び出して、前に作成したイベント オブジェクトを渡す必要があります。

  EventBus.getDefault().post(new EventClass (Data));

kmaini が述べたように、LocalBroadcastManager に置き換えることができますが、インテントからデータを自分でマッピングする必要があります。オブジェクトを渡すことができる EventBus とは異なります。

また、EventBus Library の作成者である greenrobot は、この質問に次のように答えています

Q: EventBus は、Android の BroadcastReceiver/Intent システムとどう違うのですか?

A: Android の BroadcastReceiver/Intent システムとは異なり、EventBus は標準の Java クラスをイベントとして使用し、より便利な API を提供します。EventBus は、インテントのセットアップ、インテント エクストラの準備、ブロードキャスト レシーバーの実装、インテント エクストラの再抽出という面倒な作業を行いたくない、より多くのユース ケースを対象としています。また、EventBus のオーバーヘッドははるかに低くなります。

于 2016-04-25T13:34:54.543 に答える
1

別の観点から言えば、Android のブロードキャスト マネージャーは、メイン スレッド ハンドラーのメッセージ キューを使用してイベントを処理していると思います。したがって、別のスレッド (UI のないイベント/ジョブ/タスクがある場合) を適切なキュー (別の HandlerThread を使用するなど) で自由に使用できる場合は、そのスレッドの特定のキューを使用してジョブを処理することを利用できます。 UI イベントに干渉したり、独自のものを UI 作業と混ぜたりすることなく。スレッドの優先度の値をいじって、作業のバランスを取ることもできます。

GreenRobot がすべての機能を数行のコードで提供する場合、パフォーマンスの向上を確認するために必ず試してみます。

于 2016-11-15T11:11:49.073 に答える
0

EventBus を使用すると、イベントに任意の Java オブジェクトを渡すことができるため、物事がはるかに簡単になりIntentsます。オブジェクトを実装Parcelableする必要があり、既存のコードで何をすべきかではない「退屈な」パーセル可能な実装を使用する必要があるため、同じことを行う必要はありません。ベース。

于 2016-10-09T12:43:39.840 に答える