EventBus实现全解,手写EventBus

匿名 (未验证) 提交于 2019-12-03 00:08:02

首先,大家都知道,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,希望对大家有用,有不对的地方,希望可以留言指正

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!