EventBus的使用

EventBus是一款轻量级事件发布/订阅轻量级框架,可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。

注册和取消注册

在activity的生命周期中,进行注册的取消注册的操作。如在onCreate中注册,在onDestroy中取消注册。

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

//取消注册
EventBus .getDefault().unregister(MainActivity.this);

创建消息类

消息类可以根据自己的需求任意实现,但注意post时传递的参数和订阅方法中的参数对应。

EventBus.getDefault().post(new EventBusMessage("hello word"))

@Subscribe(threadMode = ThreadMode.POSTING)     
public void MessageEventBus1(EventBusMessage eventBusMessage){
 }

线程模式

ThreadMode.POSTING 订阅者方法将在发布事件所在的线程中被调用。这是默认模式。
ThreadMode.MAIN 订阅者方法将在主线程(UI线程)中被调用。
ThreadMode.MAIN_ORDERED 订阅者方法将在主线程(UI线程)中被调用。事件将先进入队列然后才发送给订阅者。
ThreadMode.BACKGROUND 订阅者方法将在后台线程中被调用。如果发布事件的线程不是主线程,那么订阅者方法将直接在该线程中被调用。如果发布事件的线程是主线程,那么将使用一个单独的后台线程,该线程将按顺序发送所有的事件。
ThreadMode.ASYNC 订阅者方法将在一个单独的线程中被调用。

黏性事件

黏性事件: 新订阅者仍能接受到先前发布的事件。
正常情况下在事件发布后才订阅该事件的订阅者无法接受到该事件。若此事件为黏性事件,eventBus则会缓存这些黏性事件,新订阅者将会受到所有的黏性事件,除非黏性事件被删除。

// 订阅粘性事件
@Subscribe(sticky = true)
public void onMessageEvent(MessageEvent event) {
    ...
}

// 发布粘性事件
EventBus.getDefault().postSticky(new MessageEvent("Hello EventBus!"));

// 移除指定的粘性事件
removeStickyEvent(Object event);

// 移除指定类型的粘性事件
removeStickyEvent(Class<T> eventType);

// 移除所有的粘性事件
removeAllStickyEvents();

事件优先级

在相同线程模式的情况下,优先级高的订阅方法会被优先调用。数值越大优先级越高。

@Subscribe(priority = 1)
public void onMessageEvent(MessageEvent event) {
    ...
}

可以在高优先级的方法内取消该事件的传递,使得低优先级的方法不被调用。只有Posting线程模式下才能取消事件的传递。

@Subscribe(threadMode = ThreadMode.POSTING, priority = 1)
public void onMessageEvent(MessageEvent event) {
    ...
    // 取消事件传递
    EventBus.getDefault().cancelEventDelivery(event);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值