廣播、觀察者模式、EventBus、RxBus的比較

0、說明

本篇是對Android廣播、觀察者模式、EventBus、RxBus四者的一些看法,工作中遇到問題時候的一些取舍,也可以回答面試官提到的這方面問題。

1、Android全局廣播Broadcast

首先全局廣播是重量級別的,并且會消耗很多資源,但是可以跨進程通信,通過以上優缺點可以知道只有一種情況下才會用到它,跨進程的時候,這個特點也是其他方案不能達到的。

2、Android本地廣播Broadcast

Local Broadcast也是會消耗很多資源的,但是相比全局廣播要輕量一些,他的最大優點是可以拿到Context、Intent等和Android系統緊密相關的上下文,這樣就方便數據的傳遞和接受。

3、觀察者模式

觀察者觀察一個主題的時候,就會把自己添加到主題的List里面,然后主題更新的時候會遍歷主題List中的觀察者,調用觀察者模式中的update函數來更新自己,最后離開的時候要從主題中移除觀察者,防止引用造成的內存泄漏。網絡上面觀察者模式的例子,由此可以看出觀察者模式中觀察者是要實現主題更新時候的接口,其實這就是和EventBus的不同,耦合性比EventBus大。

4、EventBus

EventBus中執行

    EventBus.getDefault().register(this);

的時候是讓EventBus掃描當前類,把onEvent方法記錄在Map里面,參數為key,方法為value,然后EventBus.getDefault().post(...)的時候,通過post里面的type來查找Map中對應的value,然后通過反射來執行我們的方法,最后別忘了在最后

EventBus.getDefault().unregister(this); 

注銷EventBus防止內存泄漏。
好多人說是觀察者模式,但是仔細查看可以知道和觀察者模式最大的不同是,主題在要更新數據的時候是通過反射來執行動作的
個人感覺EventBus的缺點是:代碼閱讀性降低、不能跨進程、不能混淆,但是優點很多,比觀察者模式耦合性更低,比廣播更輕量。

5、RxBus

原理和EventBus一樣,但是如果項目中用了RxJava,就可以選擇這個強于EventBus。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容