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实现全解,手写EventBus_第1张图片

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

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

EventBus实现全解,手写EventBus_第2张图片

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

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

EventBus实现全解,手写EventBus_第3张图片

EventBus每次只能分发一个事件

EventBus实现全解,手写EventBus_第4张图片

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

EventBus实现全解,手写EventBus_第5张图片

反射的执行方法;

下面是用到的几个类

SubcribeMethod:

EventBus实现全解,手写EventBus_第6张图片

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

EventBus实现全解,手写EventBus_第7张图片

ThreadMode ----线程模式

EventBus实现全解,手写EventBus_第8张图片

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

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

 

 

 

 

 

你可能感兴趣的:(Android)