Android 通信 EventBus

參考:

  • Android 框架煉成 教你如何寫組件間通信框架EventBus
  • Android EventBus源碼解析 帶你深入理解EventBus
  • Android EventBus實戰 沒聽過你就out了
  • 快速Android開發系列通信篇之EventBus

EventBus是一個publish/subscribe (發布 / 訂閱) 消息的總線,簡化了應用程序內各組件間、組件與后臺線程間的通信。比如請求網絡,等網絡返回時通過Handler或Broadcast通知UI,兩個Fragment之間需要通過Listener通信,這些需求都可以通過EventBus實現。

GitHub地址:https://github.com/greenrobot/EventBus

作為一個消息總線,有三個主要的元素:

  • Event:事件
  • Subscriber:事件訂閱者,接收特定的事件
  • Publisher:事件發布者,用于通知Subscriber有事件發生

e.g. 使用方式:

1. ?在訂閱事件的activity中創建 onEvent方法。

2. ?EventBus.getDefault().register(this);//訂閱事件。

  register會把當前類中匹配的方法(是否以onEvent開頭,是否是public且非static和abstract方法,是否是一個參數),存入一個map(EventBus存儲方法的地方)。

3. ?EventBus.getDefault().post(object);//在任何業務邏輯處理中發布事件。

  根據實參去map查找進行反射調用。

4. ?EventBus.getDefault().unregister(this);//在activity ondestroy中取消訂閱。

其中?onEvent方法 對應 post那邊的?ThreadMode:

  • PostThread:(對應onEvent)事件的處理在和事件的發送在相同的進程,所以事件處理時間不應太長,不然影響事件的發送線程,而這個線程可能是UI線程。
  • MainThread: (對應onEventMainThread)事件的處理會在UI線程中執行。事件處理時間不能太長,這個不用說的,長了會ANR的。
  • BackgroundThread:(對應onEventBackgroundThread)事件的處理會在一個后臺線程中執行,雖然名字是BackgroundThread,事件處理是在后臺線程,但事件處理時間還是不應該太長,因為如果發送事件的線程是后臺線程,會直接執行事件,如果當前線程是UI線程,事件會被加到一個隊列中,由一個線程依次處理這些事件,如果某個事件處理時間太長,會阻塞后面的事件的派發或處理。
  • Async對應onEventBackgroundThread)事件處理會在單獨的線程中執行,主要用于在后臺線程中執行耗時操作,將任務加入到后臺的一個隊列,最終由Eventbus中的一個線程池去調用;線程池與BackgroundThread用的是同一個。

其中BackgroundThread和Async的區別是:

BackgroundThread中的任務,一個接著一個去調用,中間使用了一個布爾型變量handlerActive進行的控制。

Async則會動態控制并發。

?

轉載于:https://www.cnblogs.com/CharlesGrant/p/4979829.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458622.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458622.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WIFI無線路由器的五種工作模式

http://www.360doc.com/content/12/0814/08/10560798_230064460.shtml

iOS面試題1

而技術開發面試,問一些技術相關的問題是必須的,最新的技術可能人人都趨之若鶩,但有些原理和基礎的也希望都有了解。 這里整理了一些iOS相關的面試題,(可能都已經老掉牙)但是也想跟大家分享下! 如…

高質量JAVA代碼編寫規范

1. Java 命名約定   除了以下幾個特例之外,命名時應始終采用完整的英文描述符。此外,一般應采用小寫字母,但類名、接口名以及任何非初始單詞的第一個字母要大寫。 1.1 一般概念   * 盡量使用完整的英文描述符   * 采用適用于相關領域的…

MFC中繪制動態曲線

參考: http://blog.csdn.net/zang141588761/article/details/50536788 [轉載]MFC中畫直線和曲線 一、畫直線要想在MFC中畫出有顏色的線條,首先就要設置DC的畫筆,我們可以按如下方法來設置畫筆:第一步:在View類中添加…

博客地址 RSS地址

博客地址 RSS地址 OneVs Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster http://nshipster.cn/feed.xml Limboy 無網不剩 http://feeds.feedburner.com/lzyy 唐巧的技術博客 http://blog.devtang.com/atom.xml Lex iOS notes http://i…

2015.11.27---Java

public class star{public static void main(String[] args) {System.out.print("ha");}}轉載于:https://www.cnblogs.com/supermeimei/p/5001922.html

QT之深入理解QThread

QT之深入理解QThread 理解QThread之前需要了解下QThread類,QThread擁有的資源如下(摘錄于QT 5.1 幫助文檔):在以上資源中,本文重點關注槽:start();信號:started()、finished()&#…

常見人事問題

整體素養的常見問題 一、請你自我介紹一下你自己? (面試官目的:深度了解求職者,看求職者基本的溝通和自我認知能力) NO: 只說姓名、年齡、愛好等基本的信息后就沒了。只重復簡歷里的內容,如工作經驗就…

springMVC數據封裝成POJO

springMVC把前臺的數據封裝為POJO與struts2的封裝形式不同。struts2需要在控制器聲明需封裝的POJO,而springMVC不需要任何準備工作,只需在相應的方法的參數中加上需封裝的POJO,當用戶提交表單時,springMVC會根據表單中dom元素的na…

QT輸入輸出(四)之 QProcess

QProcess Qt提供了一個QProcess類用于啟動外部程序并與之通信.這個類是異步工作的,而且在后臺執行,這樣用戶界面就可以始終保持響應。 啟動一個新的進程的操作非常簡單,只需要將待啟動的程序名稱和啟動參數傳遞給start()函數即可. 例如: QObj…

iOS 推送 邏輯

推送 階段一:Provider[服務端]把要發送的消息,目的IOS設備標識打包,發送給APNS; 階段二:APNS在自身的已注冊Push服務的IOS設備列表中,查找有相應標識的IOS設備,并將消息發送到IOS設備&#xff1…

正則提取的url中的域名以及替換域名的方法 preg_match()和preg_replace()

<?php //網站的url$url http://www.baidu.com/index.php;//正則表達式$reg /(http):\/\/([^\/])/i;preg_match($reg, $url,$res);/** $res的結果array (size3)0 > string http://www.baidu.com (length20)1 > string http (length4)2 > string www.baidu.com (…

音視頻開發

command s 截模擬器的屏幕 MP.4只是一個容器 H.264 H.263是真正的格式 H.265正在測試中 avi H.264 H.263 視頻解碼&#xff1a;將H.263 H.264轉換為視頻和音頻的格式 視頻編碼&#xff1a; 解碼&#xff1a;硬解碼&#xff1a;GPU做的解碼 CPU做除了圖片以外的&#…

10.11 安裝pod

原文地址&#xff1a;http://www.jianshu.com/p/5fc15906c53a 感謝。 更新升級10.11 cocoapods安裝出問題最簡單的解決方法 這是因為10.11把cocoapods直接干掉了 sudo gem install -n /usr/local/bin cocoapods 再加一句&#xff0c;完美解決 sudo xcode-select --switch /App…

windows任務管理器中的工作設置內存,內存專用工作集,提交大小詳解

通俗的講工作設置內存是程序占用的物理內存(包含與其他程序共享的一部分), 內存專用工作集是程序獨占的物理內存, 提交大小是程序獨占的內存(包含物理內存和在頁面文件中的內存). 注:頁面文件就是存放不在物理內存中的內存,文件路徑一般在C:\pagefile.sys,目的是為了能夠讓更…

coreData mapView #include

一、coreData 需要導入系統庫CoreData 新建文件的時候選core data 中的Data Model 然后加相應的表 加完表后 在Model.xcdatamodeld中新建文件 選coredata中的第三個 即可 如果兩個表有聯系 就將附表放到主表中 在build Setting中&#xff0c;輸入search 在Framework Searc…

淺談 C++ 中的 new/delete 和 new[]/delete[]

來自&#xff1a;http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C 中&#xff0c;你也許經常使用 new 和 delete 來動態申請和釋放內存&#xff0c;但你可曾想過以下問題呢&#xff1f; new 和 delete 是函數嗎&#xff1f;new [] 和 delete [] 又是什么&#xff1f…

JavaScript中的原型繼承原理

在JavaScript當中&#xff0c;對象A如果要繼承對象B的屬性和方法&#xff0c;那么只要將對象B放到對象A的原型鏈上即可。而某個對象的原型鏈&#xff0c;就是由該對象開始&#xff0c;通過__proto__屬性連接起來的一串對象。__proto__屬性是JavaScript對象中的內部屬性&#xf…

XMPP

XMPP不支持視頻聊天 支持文字聊天 但對于圖片和語音聊天支持的不好 那么就將他們轉成NSData的形式 IM Instance Message 即時聊天 聊天系統中 XMPP主要做兩個人的聊天和群聊&#xff0c;只用了這兩個功能 還有一個HTTP的服務器 &#xff0c;他是一個旁路服務器 XMPP底層…

QT 調試

QT調試&#xff08;參考下面的說明就可以正常調試&#xff09;&#xff1a;http://blog.csdn.net/wchengshen/article/details/50254731http://blog.csdn.net/sx341125/article/details/53606534 QT調用DLL&#xff1a; Qt中調用VS編譯dll的方法(一)----顯式調用 qt使用動態庫(…