★41.EventBus

2017-06-29  本文已影响0人  iDragonfly

EventBus简介

简单示例

1. 定义事件类

// 事件类的结构无关紧要
public class EventBusMsg {
    public String name;

    public EventBusMsg(String name) {
        this.name = name;
    }
}

2. 订阅与取消订阅事件

1. 订阅事件

ActivityFragmentonCreate(...)onResume()等方法内登记,注意生命周期对齐。

EventBus.getDefault().register(MainActivity.this);

2. 取消订阅事件

ActivityFragmentonDestory()onPause()等方法内取消登记,注意生命周期对齐。

EventBus.getDefault().unregister(MainActivity.this);

3. 定义事件处理方法

订阅者ActivityFragment等)内定义 事件处理方法

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventBusMsgEvent(EventBusMsg event) {
    Log.d(TAG, "接收到信息");
}

4. 发布事件

EventBus.getDefault().post(new EventBusMsg("我是EventBus发送的数据"));

ThreadMode的四种线程模式

1. POSTING

@Subscribe(threadMode = ThreadMode.POSTING)
public void onXEvent(EventBusMsg event) {
    Log.d(TAG, "接收到信息");
}

2. MAIN

@Subscribe(threadMode = ThreadMode.MAIN)
public void onXEvent(EventBusMsg event) {
    Log.d(TAG, "接收到信息");
}

3. BACKGROUND

@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onXEvent(EventBusMsg event) {
    Log.d(TAG, "接收到信息");
}

4. ASYNC

@Subscribe(threadMode = ThreadMode.ASYNC)
public void onXEvent(EventBusMsg event) {
    Log.d(TAG, "接收到信息");
}

粘性事件

简介

简单示例

1. 定义事件

// 事件类的结构无关紧要
public class EventBusMsg {
    public String name;
    public EventBusMsg(String name) {
        this.name = name;
    }
}

2. 发布粘性事件

// 先发布事件
EventBus.getDefault().postSticky(new EventBusMsg("我是Sticky消息"));

// 后启动事件订阅方Activity
Intent intent = new Intent(MainActivity.this, EventBusSendActivity.class);
MainActivity.this.startActivity(intent);

3. 粘性事件的两种使用方式

订阅

1. 订阅与取消订阅事件

参考上文。

2. 定义事件处理方法
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEventBusMsgEvent(EventBusMsg event) {
    Log.d(TAG, "接收到信息");
}

手动获取

获取
EventBusMsg msg = EventBus.getDefault().getStickyEvent(EventBusMsg.class);
移除
EventBus.getDefault().removeStickyEvent(EventBusMsg.class);
EventBus.getDefault().removeAllStickyEvents();

事件处理方法优先级

设置优先级

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

取消事件传递

EventBus.getDefault().cancelEventDelivery(event);
上一篇 下一篇

猜你喜欢

热点阅读