EventBus3.0使用及原理笔记

概述

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使用及原理笔记_第1张图片
以上大概意思就是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.greenrobotgroupId>
    <artifactId>eventbusartifactId>
    <version>3.1.1version>
dependency>

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

项目源码地址

https://github.com/greenrobot/EventBus

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

你可能感兴趣的:(【Android开源库】)