EventBus框架

一、EventBus框架的github地址:github.com/greenrobot/EventBus

主要用于事件的发布和订阅,是一个发布/订阅的事件总线

包含四个成分:发布者、订阅者、事件和总线

四者之间的关系:订阅者订阅事件到总线,发送者发布事件,订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者

二、实例

两个Fragment组成主界面,左边的Fragment是目录(列表),右边的Fragment是详细信息界面

1、左边目录是从网络获取的;

2、当点击目录上的列表条目的时候,动态更新详细信息界面

传统的做法是:

1、左边目录Fragment在onCreate中去开启线程去访问网络获取数据,获取完成之后通过handler去更新界面

2、左边目录Fragment提供一个接口,然后详细信息界面去注册这个接口,当发生点击时,去回调这个接口,让详细信息界面发生改变,这一传统的操作方法可以用EventBus来代替完成

EventBus的做法是:

EventBus.getDefault().register(this);//订阅事件

EventBus.getDefault().post(object);//发布事件

EventBus.getDefault().unregister(this);//取消订阅

1、在onCreate中进行了事件的订阅,,onDestroy里进行了事件的取消,onViewCreate里模拟一个子线程去网络加载数据,获取成功后我们调用EventBus.getDefault().post()发布一个事件

2、总得流程是:onCreate时,EventBus扫描当前类,将onEventMainThread以键值对的形式存储,键为Item.class,值为包含该方法的对象,当点击事件发生时,出发onEventMainThread方法,并把item值传进来,更新控件

三、EventBus的ThreadMode

1、EventBus包含4个ThreadMode:PostThread,MainThread,BackgroundThread,Async

2、具体的方法名为:onEventPostThread, onEventMainThread,onEventBackgroundThread,onEventAsync

3、区别:

onEventMainThread代表这个方法会在UI线程执行

onEventPostThread代表这个方法会在当前发布事件的线程执行

BackgroundThread这个方法,如果在非UI线程发布的事件,则直接执行,和发布在同一个线程中。如果在UI线程发布的事件,则加入后台任务队列,使用线程池一个接一个调用

Async 加入后台任务队列,使用线程池调用,注意没有BackgroundThread中的一个接一个

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容