Android事件总线——EventBus的使用

本文详细介绍了Android事件总线库EventBus的使用,包括EventBus的基本概念、线程模型、基本用法、代码示例、黏性事件以及ProGuard混淆规则。EventBus简化了组件间通信,降低了耦合,提供了POSTING、MAIN、BACKGROUND和ASYNC四种线程模型,支持黏性事件功能。
摘要由CSDN通过智能技术生成

前言

首先我们来说下事件总线,它的作用:为了更简化并更高质量的在Activity,Fragment,Thread和Service等之间的通信,解决组件之间高耦合的同时仍能进行高效的通信。

什么是EventBus

EventBus 是一款针对Android优化的发布-订阅事件总线,简化了应用程序中的各个组件与后台线程间的通信。

其优点是开销小,代码更优雅,将发送者和接收者解耦。

EventBus的使用

EventBus三要素
  • Event:事件。(任意类型)
  • Subscriber:事件订阅者。在EventBus3.0之前仅限定于4种线程模型(onEvent,onEventMainThread,onEventBackgroundThread和onEventAysnc)。而在EventBus3.0之后,事件处理方法任意命名,但必须添加一个注解@Subscribe,并指定线程模型(默认为POSTING)。
  • Publisher:事件发布者。调用EventBus的post(Object)。根据post参数类型,自动调用相应事件的函数。
EventBus4种ThreadMode(线程模型)
  • POSTING(默认):发布事件和接收事件在同一个线程。在使用该线程模型事件处理函数中尽量避免执行耗时操作,会导致线程阻塞,甚至引发ANR异常。
  • MAIN:处理事件在UI线程执行。事件处理的事件不能太长,太长会导致ANR。
  • BACKGROUND:如果事件在UI线程发布,则该事件函数处理在新的线程中运行;如果事件在子线程发布,则事件函数处理直接在发布线程中运行。此事件处理函数禁止更行UI操作。
  • ASYNC:无论事件在哪个线程发布,该事件函数处理都会在新建的子线程中执行。同样,该事件处理函数禁止更行UI操作。
EventBus的基本用法

(1) 自定义一个事件类

public class MessageEvent{
    ...
}

(2)在需要订阅该事件的地方注册事件

EventBus.getDefault().register(this);

(3)发送事件

EventBus.getDefault().post(messageEvent);

(4)处理事件

@Subscribe(threadMode = ThreadMode.MAIN)
public void XXX(MessageEvent messageEvent){
    ...
}

(5)取消注册事件

EventBus.getDefault().unregister(this);

代码示例

(1)添加依赖库

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值