EventBus3.0の紹介と正しい使用法

EventBus3.0の紹介と正しい使用法

定期的なイベント配信

  • 意図、ジャンプ+転送パラメータ(非常に制限されています)
  • ハンドラー。通常、メインスレッドのUIを更新するために使用されます。不適切なSihongは、メモリリークが発生しやすいです。
  • 同じスレッド内のデータ相互作用に限定されたインターフェースインターフェース
  • BroadCastReceiver、注文放送+無秩序放送
  • AIDLのクロスプロセス通信、コードの読み取りはフレンドリーではなく、メンテナンスコストは高い
  • ローカルストレージなどの他の方法。

EventBusとは何ですか?

EventBusは、Androidに最適化された発行/サブスクライブメッセージイベントバスであり、アプリケーション内のさまざまなコンポーネント間、コンポーネントとバックグラウンドスレッド(
アクティビティ、フラグメント、スレッド、サービスなど)間の通信を簡素化します。

使用するシーン

例:

  • ネットワークリクエストなど、戻るときに、HandlerまたはBroadCastBeceiver通知を介してメインスレッドUIを更新します
  • Nフラグメントは、リスナー(モニター)を介して通信する必要があり
    ますこれらの要件は、EventBusを介して完了および実装できます

公式アーキテクチャ図

ここに写真の説明を挿入

GitHubアドレス:

https://github.com/greenrobot/EventBus

EventBusライブラリをインポートする

ビルド、gradle

implementation 'org.greenrobot:eventbus:3.2.0'

EventBusの使用

EventBusは3つのステップを使用します

正式な登録/登録解除によって提供される方法が反映されます

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

 @Override
 public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this);
 }

実際、実際の開発では、EvenBusメソッドを正しく使用しています。appbuild、gradle
の依存関係モジュールに注釈依存関係ライブラリを追加します。

annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'

アプリビルド、gradleのdefaultConfigモジュールを追加します

// 给注解处理器传参
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ eventBusIndex : 'com.netease.eventbus.demo.MyEventBusIndex' ]
            }
        }

使用するカスタムアプリケーションのonCreateメソッドに次のコードを追加します。

EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();
  1. イベントを定義する
public static class MessageEvent { /* Additional fields if needed */ }

  1. イベントをサブスクライブします(注釈+メソッド指定のパラメーター)
@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};

スティッキーイベント
sticky = true @Subscribeアノテーションを追加:sticky = true
機能:消費の遅延または初期化されていない

@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)  
public void onMessageEvent(UserInfo user) {/* Do something */};
  1. イベントの送信(メッセージの送信)
EventBus.getDefault().post(new MessageEvent());

EventBusサブスクリプションメソッドの実行優先度

@Subscribe(threadMode = ThreadMode.MAIN, priority = 1)  
public void onMessageEvent(UserInfo user) {
	//消费消息/事件
	tv.setText(User.toString)
	Log.e("mile","onMessageEvent");
};

// priority优先级越高,数值越大。默认都为0
@Subscribe(threadMode = ThreadMode.MAIN, priority = 10)  
public void onMessageEvent(UserInfo user) {
	//消费消息/事件
	tv.setText(User.toString)
	Log.e("mile","onMessageEvent");
};

2つのサブスクリプション方式が同時に受信できる場合、優先度の値が高いほど、優先度が高くなります。デフォルトは0です

おすすめ

転載: blog.csdn.net/yanwenyuan0304/article/details/106232315