状態の変更(接続、切断、onServiceDiscoverd、onCharacteristicChangeなど)を処理し、gattサーバーを介して別のデバイスからデータを受信するサービスを実装しました。
私の質問は、Greenrobot Eventbusブロードキャストレシーバーの交換サービスとアクティビティの間を使用してイベントを効率的に処理できるかどうかです。
LocalBroadcastManagerとは異なり、EventBusはより簡単に使用できます。あなたは3つのステップを経るだけです:
1-イベントクラスを作成します。アクションが発生したときの応答を表す単純なJavaクラス。
2-イベントバスをActivityonCreateメソッドのサブスクライバーとして登録します
EventBus.getDefault().register(this);
そしてもちろん、ActivityonDestroyメソッドで登録を解除します
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のオーバーヘッドははるかに低くなります。
LocalBroadcastを実装するために私がたどったリンクは次のとおりです。
https://stackoverflow.com/a/8875292/440674
これが私の実装の要約です:
受信アクティビティまたはサービスの場合:
1)ローカルbraodcastに登録します(通常はonCreateで):
LocalBroadcastManager.getInstance(this).registerReceiver(
mMessageReceiver, new IntentFilter("broacast_name"));
2)ローカルブロードアスト(通常はonDestroy)の登録を解除します。
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
3)ブロードキャストレシーバーを定義します。
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//Handle local broadcast
}
};
送信アクティビティまたはサービスの場合:
Intent it = new Intent("broacast_name");
it.putExtra("data", "value");
LocalBroadcastManager.getInstance(context).sendBroadcast(it);
別の見方をすれば、Androidのブロードキャストマネージャーはメインスレッドハンドラーのメッセージキューを使用してイベントを処理すると思います。したがって、別のスレッドを自由に使用できる場合(UIイベント/ジョブがない場合)/tasks)を適切なキュー(別のHandlerThreadを使用するなど)で使用すると、UIイベントを妨害したり、UI作業と混同したりすることなく、そのスレッドの特定のキューを使用してジョブを処理できます。スレッドの優先度の値で遊ぶこともできます。仕事のバランスをとる。
さて、GreenRobotが数行のコードですべての機能を提供している場合、パフォーマンスの向上を確認するために間違いなく試してみます。
EventBusを使用すると、任意のJavaオブジェクトをイベントに渡すことができるため、作業がはるかに簡単になります。オブジェクトはIntents
と「面倒な」パーセル化可能な実装を実装する必要があるため、Parcelable
でも同じことは行いません。既存のコードベースで何をすべきかわからないかもしれません。