首页 > 学院 > 开发设计 > 正文

EventBus3.0使用详解

2019-11-07 23:44:17
字体:
来源:转载
供稿:网友

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的更新。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表