android组建之间通信_Android各组件/控件间通信利器之EventBus
實(shí)際項(xiàng)目開發(fā)過(guò)程中,經(jīng)常遇到如下場(chǎng)景:不同的應(yīng)用程序組件的控件間具有一定的相互關(guān)聯(lián)性,其中用戶對(duì)后者進(jìn)行的某種操作會(huì)引起前者的相應(yīng)改變。舉一個(gè)具體的場(chǎng)景:以糗事百科為例,在糗事列表頁(yè)和詳情頁(yè)頁(yè),對(duì)于每個(gè)糗事而言,布局基本一致,在詳情頁(yè)點(diǎn)擊了個(gè)贊,贊的數(shù)量增加,同時(shí)贊的圖標(biāo)發(fā)生了變化,此時(shí)返回到列表頁(yè),此糗事上的贊圖標(biāo)以及數(shù)量與剛剛詳情頁(yè)的需要保持一致。在舉一個(gè)例子,對(duì)于多個(gè)底部導(dǎo)航tab下的資訊類閱讀app,在咨詢?cè)斍轫?yè)點(diǎn)擊了收藏,然后收藏成功,此時(shí)回到底部tab中的個(gè)人中心,假如個(gè)人中心中有我的收藏,同時(shí)后面顯示的是收藏?cái)?shù)量,此時(shí)此收藏?cái)?shù)量需要同于于剛剛用戶所進(jìn)行的收藏/取消收藏而即時(shí)更改數(shù)字。凡此種種,類似需求場(chǎng)景非常常見。
有時(shí)候,當(dāng)此類需求相對(duì)簡(jiǎn)單時(shí),通過(guò)接口以實(shí)現(xiàn)回調(diào)等方式可以完成,但是當(dāng)不同組件/控件之間的關(guān)系紛繁復(fù)雜時(shí),基于接口的方案不僅使得代碼非常繁瑣,同時(shí)是的程序邏輯很混亂,基于此,EventBus,為此類需求的實(shí)現(xiàn)提供了非常方便的方案。
網(wǎng)上已經(jīng)有不少EventBus的使用介紹,在此簡(jiǎn)單介紹下完整的使用流程。
1. 首先定義事件基類(其實(shí)不定義也可以,定義后的好處在于在同一個(gè)回調(diào)函數(shù)中直接依據(jù)不同的子類事件類型可以直接繼續(xù)邏輯上的處理,代碼和邏輯更加簡(jiǎn)潔清晰)
1 public classBaseEvent {2
3
4 }
2. 定義具體的事件類型(以上述收藏事件為例)
1 public class FavorEvent extendsBaseEvent {2
3 private intdid;4
5 publicFavorEvent() {6
7 }8
9 public FavorEvent(intdid) {10 this.did =did;11 }12
13 public intgetDid() {14 returndid;15 }16
17 public void setDid(intdid) {18 this.did =did;19 }20
21 }
3. 在需要監(jiān)聽此收藏事件的地方向EventBus注冊(cè)事件監(jiān)聽器
1 EventBus.getDefault().register(this);
4. 當(dāng)需要取消注冊(cè)事件監(jiān)聽器時(shí)
EventBus.getDefault().unregister(this);
注:Android中,當(dāng)遇到如EventBus中的register時(shí),一般的,相應(yīng)都會(huì)有unregister邏輯。且經(jīng)常register與unregister邏輯相互對(duì)應(yīng),處在如Activity等組件的不同生命周期中。這是因?yàn)镋ventBus(其他也類似)在注冊(cè)時(shí)由于是采用硬引用,存在潛在的內(nèi)存泄露問(wèn)題,而在相應(yīng)生命周期中(如onDestroy)取消注冊(cè),即可消除可能潛在的內(nèi)存泄露問(wèn)題。
5. 當(dāng)事件發(fā)生時(shí),需要通知相應(yīng)事件監(jiān)聽器進(jìn)行相應(yīng)邏輯處理
1 //告知EventBus進(jìn)行了收藏操作,讓其通知相關(guān)感興趣方(主要的是通知個(gè)人中心頁(yè)面改變我的收藏?cái)?shù)量)
2 EventBus.getDefault().post(new FavorEvent());
6. 其他組件/監(jiān)聽器具體事件邏輯
1 public voidonEvent(BaseEvent event) {2 //接收收藏事件通知,同步處理收藏?cái)?shù)字
3 if (event instanceofFavorEvent) {4 //即時(shí)更新收藏的數(shù)量(從sqlite中取得收藏?cái)?shù)量)
5 updateFavorNum();6 } else if(..){7 ...8 }9 }
整個(gè)的使用流程主要也就這么多了,其中,關(guān)于子線程和UI線程之間等亦可進(jìn)行類似事件通知,網(wǎng)上此類資料很多,不再贅述了。
總結(jié)
以上是生活随笔為你收集整理的android组建之间通信_Android各组件/控件间通信利器之EventBus的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么是python自动化测试_pytho
- 下一篇: android gridview行分割线