您的位置:首页 > 其它

EventBus事件处理总线

2018-01-30 18:16 295 查看

写在前头

 EventBus 是一个事件处理总线,可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。它比广播的使用更为简便,且广播的效率并不高。



EventBus的优势

简化了组件间的通讯

分离了事件的发送者和接受者

在Activity、Fragment和线程中表现良好

避免了复杂的和易错的依赖关系和生命周期问题

使得代码更简洁,性能更好


Eventbus接受消息的四种ThreadMode

POSTING(默认方式) 该方式会使处理消息的函数在与发送消息相同的线程执行,如果发送消息在主线程中,这消息的接收也会在主线程中,如果发送消息在子线程中,这消息的接收也会在子线程中。

Main 消息的接收在主线程中被执行(应避免耗时操作)。

BACKGROUND 如果发送消息在主线程中则开辟一个新的线程来执行,否则直接在发送消息的子线程中执行。

ASYNC 直接开辟一个新的线程来执行消息的接收(该方法不可以操作UI更新)。


Eventbus使用详解


 一、普通事件处理(非粘性事件)


(1)添加依赖

compile 'org.greenrobot:eventbus:3.0.0'

(2)在需要订阅的类中注册EventBus

//注册EventBus
EventBus.getDefault().register(this);

(3)创建一个消息类(用于传递)

public class MyEvent {
private String msg;

public MyEvent(String msg)
{
this.msg = msg;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}
}


(4)发送消息

//发送消息
EventBus.getDefault().post(new MyEvent("从SecondActivity回传消息到MainActivity"));


(5)在订阅类中接收消息

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(MyEvent event)
{
mTextView.setText(event.getMsg());
}

(6)使用完毕或者生命周期结束时解绑EventBus

//取消绑定
EventBus.getDefault().unregister(this);


二、粘性事件处理

粘性事件:即消息已经发送以后再订阅,依然可以收到消息。(默认状态为非粘性事件)我们只需要对之前的接受消息代码稍作修改即可
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN)//设置sticky为true就可以处理粘性事件了
public void onEventMainThread(MyEvent event)
{
mTextView.setText(event.getMsg());
}


粘性事件的发送方法EventBus.getDefault().postSticky(new MyEvent("测试"));


效果展示

(1)第一个aictivity跳转到第二个activity



(2)在第二个activity发送消息



(3)在第一个activity中接收到了第二个activity回传的消息

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息