AgeraBus簡介
AgeraBus 是基于谷歌開源的Agera實(shí)現(xiàn)的Android事件總線,實(shí)現(xiàn)了EventBus基本常用的功能狼荞,下面將為你一一介紹绰精,如果要了解Agera察绷,可以去看我文章后面推薦的兩個地址。
添加依賴
在項(xiàng)目根目錄的build.gradle中添加:
dependencies {
compile 'xyz.zpayh:agerabus:1.0.4'
compile 'com.google.android.agera:agera:1.3.0'
}
基本使用方法
單進(jìn)程下的基本使用方法可以參考我之前寫的文章
基于Agera的EventBus實(shí)現(xiàn)庫碗旅。
多進(jìn)程支持
一般來講,EventBus只支持單進(jìn)程下傳遞事件的镜悉,因?yàn)槭褂枚噙M(jìn)程都會造成如下幾個方面的問題:
- 靜態(tài)成員和單例模式完全失效祟辟。
- 線程同步機(jī)制失效。
- Application會多次創(chuàng)建侣肄。
造成上面問題的原因是因?yàn)椴煌M(jìn)程間不共享內(nèi)存旧困,而Application是因?yàn)槊總€進(jìn)程初始化過程都會創(chuàng)建新的Application。不同進(jìn)程的組件會擁有獨(dú)立的虛擬機(jī)稼锅、Application吼具、以及內(nèi)存空間,這就使得事件傳遞不了矩距,使EventBus失效拗盒。
AgeraBus 采用Messenger實(shí)現(xiàn)跨進(jìn)程通信,相比于之前的使用方法有些許不一樣:
- 在自己的Application的onCreate中調(diào)用AgeraBus.init(Context)進(jìn)行注冊(由于Application在每個進(jìn)程都會被創(chuàng)建剩晴,確保了每個進(jìn)程都有向AgeraBus進(jìn)行注冊锣咒,如果不在Application進(jìn)行注冊的話侵状,就在各個不同進(jìn)程的組件第一次使用的時候進(jìn)行注冊也行);
- 跨進(jìn)程傳遞的事件必須實(shí)現(xiàn)Serializable或者Parcelable接口(基本類型已經(jīng)默認(rèn)實(shí)現(xiàn)Serializable)。
- 沒了毅整,其他使用方法跟基于Agera的EventBus實(shí)現(xiàn)庫一樣趣兄。
注意
多進(jìn)程有些限制:
- 沒有實(shí)現(xiàn)Serializable或者Parcelable接口的事件是不會跨進(jìn)程傳遞的。
- 由于跨進(jìn)程不能共享內(nèi)存的悼嫉,本質(zhì)上事件在跨進(jìn)程傳遞中已經(jīng)不是同一個事件了艇潭,所以不同進(jìn)程對事件內(nèi)容進(jìn)行修改,是不會對其他進(jìn)程造成影響的戏蔑,除非你重新發(fā)送新事件蹋凝。
- 取消事件的傳遞也只對當(dāng)前進(jìn)程有效,沒法影響到其他進(jìn)程总棵。
v1.0.3版本中除了實(shí)現(xiàn)了IPC傳遞事件之外鳍寂,也更新到Agera最新版本,還有就是取消事件傳遞必須在發(fā)送事件的線程中取消情龄,否則是沒有效果的迄汛,本來是想拋出運(yùn)行時異常,想想還是算了骤视。
以上就是AgeraBus的最新版本的使用鞍爱,具體使用方法可以看Github上的SampleDemo,下面放出鏈接专酗,希望有在學(xué)習(xí)使用Agera的同學(xué)也能使用我的AgeraBus睹逃。