您的位置:首页 > 移动开发 > Android开发

Android之EventBus

2015-12-07 21:47 316 查看
首先来一个重磅炸弹,EventBus的官网

https://github.com/greenrobot/EventBus

前言

EventBus在传值上给我们带来了极大的方便,如activity向fragment传值,fragment向activity传值,fragment向fragment传值在EventBus面前都是小菜一碟,但要注意的是,在发布同一条消息时所用订阅了这条消息并能接收到消息的相应订阅者的相应方法都会响应,所以在发布消息和接收消息的时候要注意订阅者方法的参数设置,还有一点就是发布者和接收者必须都要是在“活着的“情况下才能相互收发消息。

这里简单说一下EventBus的基本用法:

1、在Android studio中加入如下依赖

compile 'de.greenrobot:eventbus:2.4.0'(官网有)


2、订阅者与发布者

订阅者顾名思义就是接收消息的一方,发布者就是发送消息的一方

订阅者

在接收消息的地方(如activity、fragment等)注册:

// 注册对象(在初始化时注册如在onCreate方法中或onCreateView方法中)
EventBus.getDefault().register(this);


复写如下方法:

public void onEvent() {

}

public void onEventMainThread() {

}

public void onEventPostThread() {

}

public void onEventBackgroundThread() {

}

public void onEventAsync() {

}


注意了,这里的这几个方法名称都要自己手打出来,方法名称要一模一样,耐心一点就好

还有方法有点多并不是所有的方法都必须复写的,复写自己需要的即可,

根据方法名依稀还可以看出其作用,这些方法的参数也是有讲究的

onEvent(): 该方法和发布者在同一个线程执行

onEventMainThread():当前如果是UI线程,则直接调用

onEventPostThread():

onEventBackgroundThread():如果当前非UI线程,则直接调用

onEventAsync():将任务加入到后台的一个队列,最终由Eventbus中的一个线程池去调用;线程池与BackgroundThread用的是同一个。

发布者

在需要发送消息的地方进行发布:

EventBus.getDefault().post(new Message("发送消息"));


好了,到这里在回到订阅者

发布者在这里发布消息后,订阅者则要接收这条消息,接收这条消息实则响应刚才的那几个方法,至于具体响应哪个方法那就要看发布者post方法中的实参了

发布者post中的参数是String则那五个方法中参数为String的方法被调用:

比如

如onEvent(String str)则该方法调用

如onEventMainThread(String str)则该方法调用

如果是对象则依次类推。。。。。。

只是各个方法执行的线程不同,这就要根据自己所需了

我也只是刚刚摸索到皮毛而已,以后还有待改进,如果各位道友想了解更多则上官网溜达溜达!!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: