组件间通信框架 EvenBus
在项目中首先添加EvenBus的jar包
整体过程大致可以分为3类:
1.在onCreat中使用EvenBus.getInstatnce().register(this);
2.使用EventBus.getDefault().post(object)进行事件的分发。
onEvenMainThread, (方法在UI线程执行)
onEvenPostThread,(方法在当前发布事件的线程执行)
onEventBackgroundThread,(如果在非UI线程发布的事件,则直接执行,和发布在同一个线程中。如果在UI线程发布的事件,则加入后台任务队列,使用线程池一个接一个调用)
onEventAsyns(加入后台任务队列,使用线程池调用,注意没有BackgroundThread中的一个接一个)
接收post传递的参数并进行操作。
3.在onDestroy中使用EventBus.getDefault().unregister(this);
一.第一步中,对事件进行订阅,调用EvenBus.getInstatnce().register(this)后,会遍历该类下所有以onEvent开头的方法,存在一个Map中。
二.第二步,通过post中传递的参数类型,进行判断执行哪一个onEven方法。其实在第一步的Map中的key就是post的class类型。
三。第三步,注销事件订阅。
关于EventBus的使用,如果需要使用很多观察者模式。
比如,你正在开发一个东西,需要监听网络状态变化,App的安装情况,内容的下载情况。当存在很多观察者模式
,「如何将这些事件通知到监听者」是可以复用的模块,这就是EventBus
存在的意义。这里需要大家想明白一个问题,观察者模式
本身就是一个可以复用的模块。
如果项目里面有大量的事件交互,那么还是可以通过EventBus
来实现,否则还是推荐自己在模块内部实现观察者模式
如果多个方法参数都一样,post一个此参数,会多个方法调用;
使用EventBus的时候,创建一个事件类,把你的每一个参数(或者可能发生冲突的参数),封装成一个类。
public class Event{
public static 参数;
............
}