EventBus 3.0的使用

来源:互联网 发布:简述波士顿矩阵分析法 编辑:程序博客网 时间:2024/06/01 16:01

示例代码

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //为了看着方便我们将发送事件的方法与注册写在了一起,我们可以在任意位置发送事件        //发送黏性事件        EventBus.getDefault().postSticky(new Event());        //注册EventBus        EventBus.getDefault().register(this);        //发送一个事件        EventBus.getDefault().post(new Event());    }    /**     * 普通的事件监听方法     */    @Subscribe    public void onEvent(Event event) {        Log.d("onEvent", event.event);    }    /**     * 指定事件监听方法执行的线程     */    @Subscribe(threadMode = ThreadMode.MAIN)    public void onEventThreadMode(Event event) {        Log.d("onEventThreadMode", event.event);    }    /**     * 接收黏性事件(也可以接受非黏性事件,事件与方法中的参数相同即可)     */    @Subscribe(sticky = true)    public void onEventSticky(Event event) {        Log.d("onEventSticky", event.event);    }    /**     * 指定优先级     */    @Subscribe(priority = 80)    public void onEventPriority(Event event) {        Log.d("onEventPriority", event.event);    }    @Override    protected void onDestroy() {        super.onDestroy();        //移除EventBus        EventBus.getDefault().unregister(this);    }    /**     * 要发送的事件,自己定义     */    public class Event {        public String event = "接收事件";    }}

添加依赖

在项目的build.gradle文件中添加如下依赖:

compile ‘org.greenrobot:eventbus:3.0.0’

发送数据

EventBus.getDefault().post( event);

可以发送的数据包括基本数据类型,可以是字符串,也可以是对象。

取消事件的分发

EventBus.getDefault().cancelEventDelivery(event);//取消指定非黏性事件EventBus.getDefault().removeAllStickyEvents();//取消全部的黏性事件EventBus.getDefault().removeStickyEvent(Event.class);//取消指定的黏性事件

接收消息

1.注册eventbus(在各组件的创建的时候注册,如Activity的onCreat方法)    EventBus.getDefault().register(this);2.取消注册(在各组件销毁的时候移除避免内存泄漏,如Activity的onDestroy方法)    EventBus.getDefault().unregister(this);3.实现监听方法        通过方法中的参数区分接收方法
    @Subscribe    public void onEvent(String string){        Log.d("EventBus", string +"   默认  " + Thread.currentThread().getName());    }

指定接收方法的线程

默认执行在发送消息的线程指定线程的方法 @Subscribe(threadMode = ThreadMode.**)    ThreadMode是一个枚举类型。它的值如下:    POSTING: Subscriber在发布消息(调用post函数的线程,默认的线程)的线程中执行。    MAIN: Subscriber将在Android主线程中执行。    BACKGROUND: Subscriber在后台线程中执行    ASYNC: Subscriber在异步线程,也就是在独立的线程中执行。

指定接收方法的优先级

优先级的值为0~100 ,默认优先级为0。通过@Subscribe(priority = 80)指定优先级。只有在同一个线程中的监听方法才有优先级的比较。

黏性事件

黏性事件就是能接收订阅前发送的事件,但是只能接收最新一次的粘性事件。发送黏性事件EventBus.getDefault().postSticky(event)通过设置@Subscribe(sticky = true)来接收黏性事件。默认不接收粘性事件的。接受黏性事件的方法也可以接受非黏性事件。

EventBus源码:github