关于EventBus用法总结

来源:互联网 发布:办公楼网络布线图视频 编辑:程序博客网 时间:2024/05/22 03:39

简而言之,EventBus是一个事件发布和订阅的框架。

使用方法:

1、Android studio导入:compile'org.greenrobot:eventbus:3.0.0'

2、定义事件类型:

public class MessageEvent {    public final String message;    public MessageEvent(String message) {        this.message = message;    }}

3、订阅者:

@Subscribepublic void onMessageEvent(MessageEvent event){    Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();}@Subscribepublic void handleSomethingElse(SomeOtherEvent event){    doSomethingWith(event);}
4、注册及解绑EventBus

@Overridepublic void onStart() {    super.onStart();    EventBus.getDefault().register(this);}@Overridepublic void onStop() {   EventBus.getDefault().unregister(this);    super.onStop();}
5、发送事件

EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
OK,这就是EventBus的简单用法。对于上述代码,需要注意的是:发送事件的类中不需要进行注册及解绑EventBus,但在订阅者所在的类中则需要进行注册及解绑EventBus。EventBus中事件的发送及订阅是通过事件类型,即本例中的MessageEvent,进行匹配的。

详细讲解:

EventBus包含4个ThreadModeThreadMode.POSTING、ThreadMode.MAIN、ThreadMode.BACKGROUND、ThreadMode.ASYNC

例:

@Subscribe(threadMode = ThreadMode.POSTING) public void onMessage(MessageEvent event) {    log(event.message);}
ThreadMode.POSTING:默认使用该模式,表示该方法会在当前发布事件的线程执行

ThreadMode.MAIN:表示会在UI线程中执行

ThreadMode.BACKGROUND:若当前线程非UI线程则在当前线程中执行,否则加入后台任务队列,使用线程池调用

ThreadMode.ASYNC:加入后台任务队列,使用线程池调用

Sticky Events的用法

简单来说,若之前事件使用postSticky进行发布且执行过,则当sticky为true的订阅者再次订阅时,会去stickyEvents去查找事件,然后立即去post执行。

例:

EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
@Subscribe(sticky = true)    public void onEvent(MessageEvent event) {        textField.setText(event.message);    }
若必要也可以移除之前发布过的postSticky,例:

MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);// Better check that an event was actually posted beforeif(stickyEvent != null) {    EventBus.getDefault().removeStickyEvent(stickyEvent);}
Subscriber Priorities(优先级)

这个没什么好说的,只需要知道优先级越高越优先执行,默认的优先级为0,使用例:

@Subscribe(priority = 1);public void onEvent(MessageEvent event) {…}

到这就学完了。

转载请注明出处:http://blog.csdn.net/wl1769127285/article/details/51065015

本文参考:http://greenrobot.org/eventbus/







0 0
原创粉丝点击