EventBusイベントパブリッシュ/サブスクライブフレームワークを使用して、Androidでイベント配信を実装します

シーン

EventBus

EventBusは、Android用のイベントパブリッシュ/サブスクライブバスです。これにより、アプリケーション内のさまざまなコンポーネント間の通信の複雑さ、特にフラグメント間の通信の問題が簡素化され、ブロードキャスト通信の使用によって引き起こされる多くの不便を回避できます。

公式文書

https://greenrobot.org/eventbus/documentation/

使用するシーン

プロジェクトを実行する場合、アプリケーション内のさまざまなコンポーネント間、およびコンポーネントとバックグラウンドスレッド間で通信する必要があることがよくあります。たとえば、時間のかかる操作。時間のかかる操作が完了すると、結果はハンドラーまたはブロードキャストを介してUIに通知されます。Nアクティビティはリスナーを介して通信する必要があります。別の例は、この記事で紹介するコールバックメソッドです。 MQTTプッシュを受信するコールバックメソッドでメッセージを表示します。システム通知バーでは、これらはEventBusを介して簡単に実装できます。EventBusは発行/サブスクライブ(発行/サブスクライブ)を介してイベントバスを管理します。

3つの役割

イベント:イベント。どのタイプでもかまいません。EventBusはイベントタイプに応じてグローバル通知を行います。
サブスクライバー:イベントサブスクライバー。EventBus3.0より前では、onEventで始まるメソッド(onEvent、onEventMainThread、onEventBackgroundThread、onEventAsync)を定義する必要があります。3.0以降は、イベント処理メソッドの名前を自由に使用できますが、注釈付き。@ subscribeで、スレッドモデルを指定すると、デフォルトはPOSTINGです。
パブリッシャー:イベントのパブリッシャー。任意のスレッドでイベントを公開できます。通常、EventBus.getDefault()を使用してEventBusオブジェクトを取得してから、post(Object)メソッドを呼び出すことができます。

4つのスレッドモデル

POSTING:デフォルトでは、イベント処理関数のスレッドが、イベントを公開するスレッドと同じスレッドにあることを意味します。
MAIN:イベント処理機能のスレッドがメインスレッド(UI)スレッドにあるため、ここでは時間のかかる操作を実行できないことを示します。
背景:イベント処理関数のスレッドがバックグラウンドスレッドにあるため、UI操作を実行できないことを示します。イベントを公開するスレッドがメインスレッド(UIスレッド)の場合、イベント処理関数はバックグラウンドスレッドを開始します。イベントを公開するスレッドがバックグラウンドスレッドの場合、イベント処理関数はこのスレッドを使用します。
ASYNC:イベントが公開されているスレッドに関係なく、イベント処理関数は常に実行する新しい子スレッドを作成し、UI操作も実行できないことを意味します。

注意:

ブログ:
https//blog.csdn.net/badao_liumang_qizhi
パブリック
アカウントをフォローする横暴
なプログラマープログラミング関連の電子書籍、チュートリアルプッシュ、無料ダウンロードを入手してください。

成し遂げる

公式ウェブサイトに掲載されているクイックスタートドキュメント

https://greenrobot.org/eventbus/documentation/how-to-get-started/

 

ここでは、MQTTサーバーからメッセージを受信した後、コールバックメソッドを使用してメインスレッドに渡し、例として通知バーに通知メッセージを表示します。

StickyEventsEventBusのスティッキーイベントもここで使用されます

StickyEvents

スティッキーイベントとは何ですか?簡単に言えば、スティッキーブロードキャストと同様に、イベントの送信後にイベントをサブスクライブすることでイベントを受信できます。

公式文書:

https://greenrobot.org/eventbus/documentation/configuration/sticky-events/

直訳:

一部のイベントでは、イベントのリリース後に興味深い情報が掲載されます。たとえば、イベントは、特定の初期化が完了したことを示します。または、センサーまたは位置データがあり、最新の値を保持したい場合。独自のキャッシュを実装する代わりに、スティッキーイベントを使用できます。EventBusは、特定のタイプの最後のスティッキーイベントをメモリに保存します。次に、スティッキーイベントをサブスクライバーまたは明示的なクエリに配信できます。したがって、すでに利用可能なデータを考慮するために特別なロジックは必要ありません。

EventBusを使用する

build.gradleに依存関係を導入する

    //Event bus用来传递消息
    implementation 'org.greenrobot:eventbus:3.0.0'

次に、公式ドキュメントのクイックスタート手順に従って、新しいメッセージイベントエンティティMessageEventを作成します。

public class MessageEvent {
    private String message;

    public MessageEvent(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

次に、イベントを登録し、イベントをサブスクライブする必要があるイベントを処理します。これは、MainActivityの通知バーにメッセージを表示するためです。MainActivityのonCreateメソッドで

        //在需要订阅事件的地方注册事件
        EventBus.getDefault().register(this);

次に、MainActivityでイベントを処理する必要があります

    //处理事件
    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void showTheEventMessage(MessageEvent messageEvent) {
        Log.i(TAG, "showTheEventMessage: show notification");
        showNotification(this, messageEvent.getMessage());
    }

つまり、通知バーメッセージを表示する操作が実行されます。

次に、MQTTメッセージを受信するコールバックメソッドで

EventBus.getDefault().postSticky(new MessageEvent(msg));

メッセージを公開します。ここで、msgは配信されたメッセージの文字列コンテンツです。

上記の完全な実装プロセス

AndroidのMQTTサーバーに接続してトピックをサブスクライブし、通知バーに表示されるプッシュ通知を受信します(コードのダウンロードが添付されています)。

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/112466469

 

 

 

おすすめ

転載: blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/112476228