自己实现的观察者模式、BroadcastReceiver和EventBus三者的优缺点是啥?

个人推荐 EventBus,EventBus 有好几家实现,我比较喜欢 greenrobot 家出的,这里说的也是这家的。BroadcastReceiver 分全局和 local,如果不用跨进程的话不应该用全局 Broadcast 。这里也只讨论 Local Broadcast。代码结构Observable 的耦合性是比较高的,使用者还需要了解你 Observable 的结构,我几乎没用过;LocalBroadcastManager 用一个 Intent 封装广播事件;EventBus 将广播事件抽像成一个类;抽象程序上 EventBus 比较好。使用Observable 发送方要继承或定义个内部 Observable,接收方要继承 Observer ,还要弄点代码处理不同的通知类型;LocalBroadcastManager 首先要定义 Action 常量、ExtraKey 常量,发送时要 put 一个或一堆 Extra,接收方要继承BroadcastReceiver,弄个 IntentFilter ,在 onReceive 函数里用 switch-case 通过 action 判断类型, get 一个或一堆 Extra 来处理;EventBus 相对最简洁,写个类定义一个 Event 类型,发送方就是 post,接收方就是定义一个函数,参数为对应类型。线程Observable 接收方在调用线程处理。LocalBroadcastManager 所有调用都是在主线程,EventBus 可以定义在调用线程、主线程、后台线程、异步。生命周期都需要注意接收方生命周期的问题。在不用的时候要 unregister。OthersEventBus 还有一些额外功能,比如说定义多个接收方接收的顺序(LocalBroadcastManager不支持但全局 Broadcast 是支持的 )。
■网友
Observer需要把行为绑定在Observee上Observe(Observee, \u0026#39;event\u0026#39;, function() { ... });BroadcastReceiver,EventBus不需要知道被侦听对象,这样就就解耦了。


    推荐阅读