欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EventBus3.0使用及原理笔记

程序员文章站 2022-06-09 23:33:57
...

概述

EventBus3.0顾名思义是一种事件总线,其内部原理使用了观察者模式,有事件发布者,事件订阅者,和事件三要素。其主要作用就是当我们项目庞大时,使我们项目的各个模块能个更好解耦合。

官网对EventBus描述

EventBus is an open-source library for Android and Java using the publisher/subscriber pattern for loose coupling. EventBus enables central communication to decoupled classes with just a few lines of code – simplifying the code, removing dependencies, and speeding up app development.
EventBus3.0使用及原理笔记
以上大概意思就是EventBus使用事件发布者和事件订阅者进程松耦合,使用更简单的代码可实现与分离类的集中通讯,消除依赖关系,加快项目开发速度。

使用EventBus的好处

  • simplifies the communication between components -简化了组件之间的通信
  • decouples event senders and receivers - 将事件发送者和接收者分离
  • performs well with UI artifacts (e.g. Activities, Fragments) and background threads - 在UI工件(例如,活动,片段)和后台线程中表现良好
  • avoids complex and error-prone dependencies and life cycle issues - 避免复杂且容易出错的依赖关系和生命周期问题
  • is fast; specifically optimized for high performance - 很快; 专门针对高性能进行了优化
  • is tiny (<50k jar) - 很小(<50k)
  • is proven in practice by apps with 100,000,000+ installs has - 已经通过100,000,000+安装的应用程序在实践中得到证实
  • advanced features like delivery threads, subscriber priorities, etc. - 具有交付线程,用户优先级等高级功能。

    四种线程模型

  • POSTING (默认) 表示事件处理函数的线程跟发布事件的线程在同一个线程。
  • MAIN 表示事件处理函数的线程在主线程(UI)线程,因此在这里不能进行耗时操作。
  • BACKGROUND 表示事件处理函数的线程在后台线程,因此不能进行UI操作。如果发布事件的线程是主线程(UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线
  • ASYNC 表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行,同样不能进行UI操作。

EventBus的基本用法

EventBus in 3 steps

  • Define events,定义事件类型。
public static class MessageEvent { /* Additional fields if needed */ }
  • Prepare subscribers: Declare and annotate your subscribing method, optionally specify a thread mode:
    定义处理事件的方法,需要加Subscribe注释和线程模型
@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};
  • Register and unregister your subscriber. For example on Android, activities and fragments should usually register according to their life cycle:
    根据具体生命周期注册和解注册
 @Override
 public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this);
 }

 @Override
 public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this);
 }
  • Post events 发送事件
EventBus.getDefault().post(new MessageEvent());

添加EventBus 到你项目

Via Gradle:

implementation 'org.greenrobot:eventbus:3.1.1'

Via Maven:

<dependency>
    <groupId>org.greenrobot</groupId>
    <artifactId>eventbus</artifactId>
    <version>3.1.1</version>
</dependency>

或者下载最新jar导入项目。

项目源码地址

https://github.com/greenrobot/EventBus

具体源码也很简单,主要利用观察者模式,线程,反射的一些知识,下一篇讲解。

相关标签: EventBus Android