【Android】- EventBus3.0使用详解

1.概述:

  EventBus是针对Android的发布/订阅事件总线,可以很好的实现各个组件之间的通信,并且提高了代码的可读性和简洁性,

可有效降低消息发布者和订阅者之间的耦合性。

  下面让我们一起谈论一下EventBus如何在项目中去使用:

2.如何使用

2.1 在build.gradle中添加依赖:

compile 'de.greenrobot:eventbus:3.0.0-beta1'

2.2 定义一个消息类,此消息类不用继承任何类,也不需要实现任何接口

public class EventMessage{private String message; public EventMessage(String message) {this.message= message; } public String getEventMessage() { return message; } public void setEventMessage(String message) { this.message = message; }}

2.3 在发布事件的类中发送事件(发布事件)

EventBus.getDefault().post(new EventMessage(message));

2.4  首先需要在处理事件的类中注册事件(订阅事件)

EventBus.getDefault().register(this);

2.5 然后处理事件

@Subscribe(threadMode = ThreadMode.PostThread)
public void setMessage(Message message){
    if (message!=null){
        messageBtn.setText(message.getEventMessage());
    }
}
注意:1.在3.0之前 EventBus还并没有使用注解的方式,消息的处理只限定于onEvent、onEventMainThread、 onEventBackgroundThread、onEventAsync,它们分别代表四中不同的线程模型。而在3.0之后,消息处理的 方法可随便取名,但需要添加注解@Subscribe,并且需要指定线程的模式(默认是PostThread); 2.事件处理函数的访问权限必须为public,否则会报错。

2.6 最后需要在页面销毁时,及时的取消注册订阅,防止内存溢出

EventBus.getDefault().unregister(this);

到此完整的发布-订阅事件就结束了,是不是很简洁的就实现了。

2.7 常用API介绍

线程模式:

  在EventBus的事件处理函数中需要指定线程的模型,即指定事件处理函数运行所在线程。

  PostThread:发布事件和处理事件在同一线程中,在线程模型中避免执行耗时的操作,避免事件传递过程中引起ANR;

  MainThread:不论事件在哪个线程中发布,都会在UI线程中处理事件,更新UI操作,单不能执行耗时的操作;

  BackgroundThread:如果事件是在主线程发布的,那么该事件处理函数就会在新的线程中执行,如果事件是在子线程中发布,

那么事件直接该线程中执行,此事件处理函数避免进行UI的更新;

  Async:不论是在哪个事件发布事件,都会在新的线程中处理事件,此事件处理函数中同样避免进行UI的更新。




你可能感兴趣的:(【Android】- EventBus3.0使用详解)