一优质、EventBus框架的github地址:github.com/greenrobot/EventBus
主要用于事件的發(fā)布和訂閱声怔,是一個發(fā)布/訂閱的事件總線
包含四個成分:發(fā)布者跛锌、訂閱者惠爽、事件和總線
四者之間的關(guān)系:訂閱者訂閱事件到總線添吗,發(fā)送者發(fā)布事件沥曹,訂閱者可以訂閱多個事件,發(fā)送者可以發(fā)布任何事件碟联,發(fā)布者同時也可以是訂閱者
二妓美、實例
兩個Fragment組成主界面,左邊的Fragment是目錄(列表)鲤孵,右邊的Fragment是詳細信息界面
1壶栋、左邊目錄是從網(wǎng)絡獲取的;
2普监、當點擊目錄上的列表條目的時候委刘,動態(tài)更新詳細信息界面
傳統(tǒng)的做法是:
1、左邊目錄Fragment在onCreate中去開啟線程去訪問網(wǎng)絡獲取數(shù)據(jù)鹰椒,獲取完成之后通過handler去更新界面
2锡移、左邊目錄Fragment提供一個接口,然后詳細信息界面去注冊這個接口漆际,當發(fā)生點擊時淆珊,去回調(diào)這個接口,讓詳細信息界面發(fā)生改變奸汇,這一傳統(tǒng)的操作方法可以用EventBus來代替完成
EventBus的做法是:
EventBus.getDefault().register(this);//訂閱事件
EventBus.getDefault().post(object);//發(fā)布事件
EventBus.getDefault().unregister(this);//取消訂閱
1施符、在onCreate中進行了事件的訂閱,擂找,onDestroy里進行了事件的取消戳吝,onViewCreate里模擬一個子線程去網(wǎng)絡加載數(shù)據(jù),獲取成功后我們調(diào)用EventBus.getDefault().post()發(fā)布一個事件
2贯涎、總得流程是:onCreate時听哭,EventBus掃描當前類,將onEventMainThread以鍵值對的形式存儲,鍵為Item.class陆盘,值為包含該方法的對象普筹,當點擊事件發(fā)生時,出發(fā)onEventMainThread方法隘马,并把item值傳進來太防,更新控件
三、EventBus的ThreadMode
1酸员、EventBus包含4個ThreadMode:PostThread蜒车,MainThread,BackgroundThread幔嗦,Async
2醇王、具體的方法名為:onEventPostThread, onEventMainThread崭添,onEventBackgroundThread寓娩,onEventAsync
3、區(qū)別:
onEventMainThread代表這個方法會在UI線程執(zhí)行
onEventPostThread代表這個方法會在當前發(fā)布事件的線程執(zhí)行
BackgroundThread這個方法呼渣,如果在非UI線程發(fā)布的事件棘伴,則直接執(zhí)行,和發(fā)布在同一個線程中屁置。如果在UI線程發(fā)布的事件焊夸,則加入后臺任務隊列,使用線程池一個接一個調(diào)用
Async 加入后臺任務隊列蓝角,使用線程池調(diào)用阱穗,注意沒有BackgroundThread中的一個接一個