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.
以上大概意思就是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
具体源码也很简单,主要利用观察者模式,线程,反射的一些知识,下一篇讲解。
上一篇: 向IOC 容器添加自己的类