美文网首页Android网络专题
广播、观察者模式、EventBus、RxBus的比较

广播、观察者模式、EventBus、RxBus的比较

作者: gzfgeh | 来源:发表于2017-03-29 17:36 被阅读1043次

    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。

    相关文章

      网友评论

        本文标题:广播、观察者模式、EventBus、RxBus的比较

        本文链接:https://www.haomeiwen.com/subject/pzdeottx.html