日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中使用EventBus事件发布/订阅框架实现事件传递

發布時間:2025/3/19 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中使用EventBus事件发布/订阅框架实现事件传递 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

EventBus

EventBus是一種用于Android的事件發布-訂閱總線。它簡化了應用程序內各個組件之間進行通信的復雜度,尤其是碎片之間進行通信的問題,可以避免由于使用廣播通信而帶來的諸多不便。

官方文檔

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

使用場景

在做項目的時候往往需要應用程序內各組件間、組件與后臺線程間的通信。比如耗時操作,等耗時操作完成后通過Handler或Broadcast將結果通知給UI,N個Activity之間需要通過Listener通信,又比如本文將要介紹的在接收到MQTT推送的回調方法中將消息顯示在系統通知欄中,這些都可以通過EventBus輕松實現,EventBus通過發布/訂閱(publish/subscribe)方式來管理事件總線。

三個角色

Event:事件,它可以是任意類型,EventBus會根據事件類型進行全局的通知。
Subscriber:事件訂閱者,在EventBus 3.0之前我們必須定義以onEvent開頭的那幾個方法,分別是onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,而在3.0之后事件處理的方法名可以隨意取,不過需要加上注解@subscribe,并且指定線程模型,默認是POSTING。
Publisher:事件的發布者,可以在任意線程里發布事件。一般情況下,使用EventBus.getDefault()就可以得到一個EventBus對象,然后再調用post(Object)方法即可。

四種線程模型

POSTING:默認,表示事件處理函數的線程跟發布事件的線程在同一個線程。
MAIN:表示事件處理函數的線程在主線程(UI)線程,因此在這里不能進行耗時操作。
BACKGROUND:表示事件處理函數的線程在后臺線程,因此不能進行UI操作。如果發布事件的線程是主線程(UI線程),那么事件處理函數將會開啟一個后臺線程,如果果發布事件的線程是在后臺線程,那么事件處理函數就使用該線程。
ASYNC:表示無論事件發布的線程是哪一個,事件處理函數始終會新建一個子線程運行,同樣不能進行UI操作。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。

實現

官網給出的快速開始的文檔

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

?

這里我們以接收到MQTT服務器發的消息后的回調方法中去傳遞給主線程去在通知欄顯示通知消息為例

這里還使用了EventBus的StickyEvents黏性事件

StickyEvents黏性事件

何為黏性事件呢?簡單講,就是在發送事件之后再訂閱該事件也能收到該事件,跟黏性廣播類似。

官方文檔:

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

直譯:

有些事件在事件發布后會攜帶一些感興趣的信息。例如,事件表示某個初始化已經完成。或者你有一些傳感器或位置數據你想保持最近的值。您可以使用粘滯事件,而不是實現自己的緩存。EventBus將特定類型的最后一個sticky事件保存在內存中。然后,可以將sticky事件交付給訂閱者或顯式查詢。因此,您不需要任何特殊的邏輯來考慮已經可用的數據。

使用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

?

?

?

總結

以上是生活随笔為你收集整理的Android中使用EventBus事件发布/订阅框架实现事件传递的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美女脱光衣服让男人捅 | 欧美无砖砖区免费 | 精品人妻无码专区视频 | 俄罗斯一级片 | 日韩精品一区二区三区不卡在线 | 日本中文字幕在线 | 黄片毛片在线免费观看 | 亚洲成人精品一区 | 亚洲第一页中文字幕 | 成人αv| 精品国产99一区二区乱码综合 | 国产看片网站 | 激情视频一区二区 | 波兰性xxxxx极品hd | 一区国产精品 | 一级性生活毛片 | h在线免费 | 后进极品白嫩翘臀在线视频 | 国产经典三级在线 | 日韩欧美国产高清 | aaa毛片视频 | 一本—道久久a久久精品蜜桃 | 少妇大叫太粗太大爽一区二区 | 一区二区三区免费网站 | 欧美aⅴ视频 | 国产毛片一区 | 国产亚洲精品久久久久久久久动漫 | 亚洲成人h | 福利一区视频 | 乱一色一乱一性一视频 | www日| 婷婷丁香综合 | 美女爱爱爱 | 桃谷绘里香在线播放 | 免费一区二区视频 | 大陆av在线播放 | 日本在线视频www | 欧美视频免费看欧美视频 | 五月婷婷,六月丁香 | 午夜91视频| 中文字幕亚洲一区 | 羞羞答答av| 片集网 | 欧美亚洲国产一区 | 成人免费播放视频 | 高清一级片 | 美女福利视频导航 | 99热这里只有精品在线 | 在线免费看黄 | 秋霞电影一区二区 | 黄色在线免费 | 草久久免费视频 | 亚洲精品麻豆 | 午夜在线观看一区 | 在线观看视频毛片 | 光明影院手机版在线观看免费 | 男生舔女生胸 | 精品熟妇无码av免费久久 | 久久久在线视频 | 亚洲a级精品 | 亚洲欧美中文日韩在线v日本 | 亚洲大尺度网站 | 日韩在线观看一区二区 | 亚洲淫 | 国产欧美日韩精品一区二区三区 | 操干视频| 一起艹在线观看 | 久热只有精品 | 欧美一区| 中文字幕在线播放不卡 | 久久久久久久久久久久久久久久久久 | 久久综合久久综合久久综合 | 777四色| 国产精品丝袜黑色高跟 | 浪潮av一区二区三区 | 免费三片在线观看网站v888 | 国产精品一区二区免费视频 | 国产日本在线 | 日韩中文久久 | 日韩在线免费视频观看 | 波多野结衣国产 | 羞羞答答一区 | 黑人中文字幕一区二区三区 | 国产高清精品在线观看 | 亚洲AV无码片久久精品 | 亚洲成人网络 | 青青草.com | 中文字幕女优 | 日本少妇bbb | 欧美激情免费在线 | 美女网站免费视频 | 黄色资源在线播放 | 制服丝袜天堂网 | av成人在线播放 | 麻豆国产精品 | 国产欧美亚洲一区 | 最新视频在线观看 | 日韩一区二区影院 | 久热国产在线 |