使用EventBus实现功能及原理

EventBus概述:

     EventBus是一款针对 Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

 
什么是事件总线管理:

1. 将事件放到队列里,用于管理和分发

2. 保证应用的各个部分之间高效的通信及数据,事件分发

3. 模块间解耦

EventBus事件巴士概念:采用的观察者设计模式
EventBus是一个发布/订阅的事件总线.EventBus模式 - 也被称为MessageBus或者发布者/订阅者public/subscribe消息总线,可以让应用程序内部各组件间,组件与后台线程间的通讯(比如请求网络后返回数据时,通过Handler或Broadcast与UI交互,两个Fragment之间需要通过Listener通信...),但是他们之间并不相互知晓.
基于事件总线管理/订阅/分布模式.事件响应有更多的线程选择,EventBus可以向不同的线程发布事件,支持Sticky Event
使用时需要先注册订阅,然后向订阅者分发消息数据即可.包含4个成分:发布者,订阅者,事件,总线.订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时可以是订阅者.分订阅,注册,发布,取消注册等步骤.

EventBus和Otto相比更节约内存,且运行效率更高.

接收消息的四种类型:
threadMod.Main表示这个方法在主线程中执行 (非常适合做异步加载,可以将子线程加载到的数据直接设置到UI界面里)
Thread.BackGROUND 表示该方法在后台执行(也就是子线程执行),不能并发处理.
如果发布者在子线程,那么该方法就在这个子线程执行
如果发布者在主线程,那么该方法会创建一个子线程,在子线程执行.

ThreadMode.ASYNC也表示在后台执行(也就是子线程执行),可以异步并发处理(非常适用于多个线程任务处理,内部有线程池管理,比如请求网络时,用这个方法,他会自动创建线程去请求)
无论发布者是在子线程还是主线程,该方法都会创建一个子线程,在子线程执行.

ThreadMode.Posting表示该方法和消息发送方在同一个线程中执行.
(注意:在EventBus之前,是通过方法来实现).

EventBus 3和2版本的对比:
接收事件:
3版本
@Subscribe(threadMode=ThreadMode.BACKGOUND,sticky=true,priorty = 100)

2版本
public void onEvent(String str){}
public void onEventMainThread(String str){}
public void onEventBackGroundThread(String str){}

在2版本中只有通过onEvent开头的方法会被注册,而且响应事件方法触发的线程通过onEventMainThread或OnEventBackgroundThread这些方法名区分,而在3.0版本中,通过@subscribe注解,来确定运行的线程threadmode是否接受黏性事件sticky以及事件优先级priority,方法名不再需要onevent开头。

第一种实现方式及操作步骤:

1:首先在act

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值