EventBus

参考文章:EventBus使用详解

一、EventBus基本使用
1.定义传递事件类
public class MessageEvent {
    public String Message;

    public MessageEvent(String message) {
        Message = message;
    }
}

2.设置事件订阅者
   /*
    订阅者
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void getMessage(MessageEvent messageEvent)
    {
        button.setText(messageEvent.Message);View
    }

在ThreadMode 枚举中定义了4个线程模式
1、PostThread:事件响应函数和事件发布在同一线程中执行。这个是默认值,这样可以避免线程切换。
2、MainThread:事件响应函数会在Android应用的主线程(大部分情况下都是UI线程)中执行。
3、BackGround:事件响应函数会在一个后台线程中执行。如果事件发布函数不是在主线程中,则会立即在事件发布线程中执行响应函数。如果事件发布函数在主线程中,EventBus则会在唯一的一个后台线程中按照顺序来执行所有的后台事件响应函数。
4、Async:事件响应函数在另外一个异步线程中执行。该线程和发布线程、主线程相互独立。如果事件响应函数需要较长的时间来执行,则应该使用该模式,例如 网络访问等。需要注意的是,由于系统并行的限制,应该避免在同一时间触发大量的异步线程。 EventBus使用一个线程池来提高线程的效率。

3.在总线上注册

一般在onCreate的时候注册,onDestroy的时候销毁。

  EventBus.getDefault().register(this);
 EventBus.getDefault().unregister(this);
4.发布事件
 EventBus.getDefault().post(new MessageEvent("EventBus牛逼!"));

2、粘性事件

如果先发布了事件,然后有订阅者订阅了该事件,那么除非再次发布该事件,否则订阅者将永远接收不到该事件。此时,可以使用粘性事件。
发布一个粘性事件之后,EventBus将在内存中缓存该粘性事件。当有订阅者订阅了该粘性事件,订阅者将接收到该事件。

// 订阅粘性事件
@Subscribe(sticky = true)
public void onMessageEvent(MessageEvent event) {
    ...
}
 
// 发布粘性事件
EventBus.getDefault().postSticky(new MessageEvent("Hello EventBus!"));

发布一个粘性事件之后,EventBus将一直缓存该粘性事件。如果想要移除粘性事件,那么可以在订阅者上使用如下方法:


		// 移除指定的粘性事件
        EventBus.getDefault().removeStickyEvent(event);
		// 移除指定类型的粘性事件
		EventBus.getDefault().removeStickyEvent(Class<T> eventType);
		// 移除所有的粘性事件
		EventBus.getDefault().removeAllStickyEvents();

3.事件优先级

EventBus支持在定义订阅者方法时指定事件传递的优先级。默认情况下,订阅者方法的事件传递优先级为0。数值越大,优先级越高。在相同的线程模式下,更高优先级的订阅者方法将优先接收到事件。注意:优先级只有在相同的线程模式下才有效。

   /*
    订阅者
     */
    @Subscribe(threadMode = ThreadMode.MAIN,priority = 10)
    public void getMessage(MessageEvent messageEvent)
    {
        button.setText(messageEvent.Message);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值