EventBus完全解析(一)基本使用

概述

EventBus是一款发布/订阅时间总线,使用观察者模式。可以轻松实现在Android各个组件之间传递消息,可以降低代码的耦合度。

怎样使用

1.首先要定义一个消息类
public class Message{
//在这里实现消息的内容属性和getter、setter
}

2.在订阅事件的地方注册事件,即订阅观察者
EventBus.getDefault().register(this);
3.在产生消息的地方发送事件
EventBus.getDefault().post(message) //message即为消息对象

4.接收并处理消息,即观察者
@Subscribe(threadMode = ThreadMode.PostThread)
public void XXX(Message message) {
... //在这里实现处理消息的逻辑
}

其中注解是为了指定线程模型,在下面会对线程模型有介绍

5.取消对消息的订阅
EventBus.getDefault().unregister(this);

线程模型

线程模型即指定事件处理方法所运行的线程,EventBus一共有四种线程模型,分别为PostThread(默认)、MainThread、BackgroundThread和Async。
- PostThread:使用该模式,事件从哪个线程发出,那么就在这个线程处理。
- MainThread:在此模式下,不论事件从哪个线程发出,它都会在UI线程进行了处理,意味着可以在处理时间的方法中进行UI的更新,同时要注意不能进行耗时的操作,有可能会引起ANR。
- BackgroundThread:分两种情况:1.如果事件从UI线程发出,那么EventBus会创建一个新的线程并把处理方法在其中运行;2.如果事件从非UI线程发出,那么事件直接在该线程中处理完成。需要注意的是在这种模式下不能进行UI更新操作。
- Async:在这种模式下,事件无论从什么线程发出,都会创建一个新线程处理。

粘性事件

粘性事件概念

EventBus支持发送粘性事件。粘性事件类似于粘性广播,即如果在事件发生时未订阅该事件,而是在发生之后才进行对该事件的订阅,观察者仍能接收到订阅之前发生的事件。注意:如果在订阅之前发送了多条事件,那么只能接收到发送的最后一条事件。

粘性事件与普通时间区别

  1. 事件处理方法:
    @Subscribe(sticky = true)
    public void XXX(Message message) {
    ......
    }

    即需要在注解中添加sticky = true.
  2. 发送粘性事件:EventBus.getDefault().postSticky(new Message("test"));
  3. 其他方法与普通事件并无区别
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值