首先,大家都知道,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,希望对大家有用,有不对的地方,希望可以留言指正
来源:51CTO
作者:YXT_ANDROID
链接:https://blog.csdn.net/tao______tao/article/details/100926496