自己实现的观察者模式、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不需要知道被侦听对象,这样就就解耦了。
推荐阅读
- 手机■遇“纠纷”自己报警被识破 男子假卖手机骗60多万
- 北京22家市属医院均开展安检基本实现重点区域安检措施全覆盖
- 长江流域渔民退捕“上岸”实现扩产新致富
- 实现“甜蜜计划”,这对中哈跨国夫妻好甜
- 北京地铁11号线西段三座车站提前实现主体结构封顶
- 有啥方法,网站,项目可以自己练习计算广告学
- 设计专业学生上传自己的作品,用哪个网站比较好
- 趣头条|先下手为强!喜提途观X,自己先享受才是最重要的
- 商家通过低保户购物而把自己的利润返还赠送低保户安装宽带或者旧电脑可行吗
- 学的自动化却对IT比较感兴趣。。感觉对自己的专业帮助不大,好苦恼,要不要继续是专精还是学点感兴趣的?
