状態の変更 (接続、切断、onServiceDiscoverd、onCharacteristicChange など) を処理し、gatt サーバーを介して別のデバイスからデータを受信するサービスを実装しました。
私の質問は、Greenrobot Eventbusを使用して、サービスとアクティビティの間のブロードキャスト レシーバーを置き換えて、イベントを効率的に処理できますか?
状態の変更 (接続、切断、onServiceDiscoverd、onCharacteristicChange など) を処理し、gatt サーバーを介して別のデバイスからデータを受信するサービスを実装しました。
私の質問は、Greenrobot Eventbusを使用して、サービスとアクティビティの間のブロードキャスト レシーバーを置き換えて、イベントを効率的に処理できますか?
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 のオーバーヘッドははるかに低くなります。
別の観点から言えば、Android のブロードキャスト マネージャーは、メイン スレッド ハンドラーのメッセージ キューを使用してイベントを処理していると思います。したがって、別のスレッド (UI のないイベント/ジョブ/タスクがある場合) を適切なキュー (別の HandlerThread を使用するなど) で自由に使用できる場合は、そのスレッドの特定のキューを使用してジョブを処理することを利用できます。 UI イベントに干渉したり、独自のものを UI 作業と混ぜたりすることなく。スレッドの優先度の値をいじって、作業のバランスを取ることもできます。
GreenRobot がすべての機能を数行のコードで提供する場合、パフォーマンスの向上を確認するために必ず試してみます。
EventBus を使用すると、イベントに任意の Java オブジェクトを渡すことができるため、物事がはるかに簡単になりIntents
ます。オブジェクトを実装Parcelable
する必要があり、既存のコードで何をすべきかではない「退屈な」パーセル可能な実装を使用する必要があるため、同じことを行う必要はありません。ベース。