EventBus实现全解,手写EventBus

首先,大家都知道,EventBus是个非常好用的事件传递工具,相比之前Handler随着参数传递来说,本人自我感觉是非常的方便,并且也比较轻量,也不会像handler那样,一不小心就会出现内存泄漏,好了,废话不多说,还是看看它的具体实现吧.

用过的同学都知道,EventBus使用起来用到的最重要的就是注册和反注册,已经事件的定义,参数的传递,3.0以后加入了线程的控制,主线程还是子线程的模式,还有粘性事件(这里就不多说,因为用的不是特别多,当然具体情况,具体分析啦)

所以接下来就是EventBus实现的几个类:

EventBus -------EventBus实现类
SubcribeMethod -------方法回调以及线程类型,回调方法参数设置
Subscribe ------- 注解类
ThreadMode ------线程枚举

1.EventBus实现方法

1):首先要使用EventBus就需要先注册,有注册就要反注册,这个是配套的(具体为什么,我想大家都知道,这里就不累赘了,哈哈)

EventBus.getDefault().register(this);

2):再者就是,注册完了,就开始使用了,大家都知道EventBus的使用非常简单;

EventBus.getDefault().post(定义的事件);

3):事件处理

@Subscribe(threadMode = ThreadMode.MAIN)
public void getEvent(EventBean eventBean) {
    Log.e("getEvent----", "getEvent---" + eventBean.getName());
}

4):反注册

EventBus.getDefault().unregister(this);

简单吧,就四步,一般注册和反注册是一起写的,onResume()注册,onDestroy()反注册;

 

EventBus:

大家用起来就知道EventBus是个单例,所以这边首先是写了一个单例,定义了三个参数

cacheMap   ----如备注写的,是用来存储所有的方法
EventBus是事件对应的一一对应,这里用的是map,key是Object这个毋庸置疑,定义的事件可以是string int,也可以是自定义bean;value:是个集合,里面是之前定义的SubcribeMethod包含的内容下面会讲到
mHander    -----处理线程,用子线程切换到主线程
mExecutorService   -----用来处理主线程切换到子线程

注册,其实就是把注册的事件(其实是一系列的方法)添加到我们的缓存中

findSubcribeMethods这个方法是干嘛的,大家应该很疑惑,上面我们定义了一个map,这里就是根据map的key来存我们的事件,通过反射来找项目所有的,当然除了java.javax.android.这些系统的方法,具体实现,可以看下面,都有注释,方便大家理解

EventBus每次只能分发一个事件

这个就是大家用到的post方法,从cacheMap里面去我们注册的类里面找对应的方法,这里就用到了handle和ExecutorService来做主线程和子线程的转换;

反射的执行方法;

下面是用到的几个类

SubcribeMethod:

Subscribe--注解,里面只写了一个线程模式

ThreadMode ----线程模式

哈哈,是不是很简单,就4个类,最重要是EventBus,最重要的要理解它的实现原理和机制

写下来,给自己一点财富,也希望可以帮助大家理解EventBus,希望对大家有用,有不对的地方,希望可以留言指正

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值