Skip to content

Xiaofei-it/HermesEventBus

⭐ 1,616  ·  Java  ·  GitHub 仓库

一个用于跨进程使用EventBus的库,适用于IPC或插件开发场景。

一句话总结

扩展EventBus实现Android进程间无缝通信,让跨进程事件发布变得简单易行。

🔥 核心能力与独特卖点

  • 跨进程事件总线:突破了标准EventBus的根本限制,支持在不同Android进程之间(而非仅限于单一进程内)发布和接收事件。
  • 与EventBus完全一致的API:使用完全相同的register()post()方法和@Subscribe注解,零学习成本,现有EventBus用户迁移只需替换依赖。
  • 自动进程路由:指定一个进程作为主协调器,自动将任何子进程的事件通过主进程转发至所有其他进程,开发者无需手动管理IPC连接。
  • 内置并发与清理机制:集成Concurrent-Utils处理IPC固有的死锁和竞态条件,并提供destroy()方法防止进程销毁时的DeadObjectException崩溃。
  • 支持应用间通信:通过包名连接独立应用,实现跨应用边界的事件驱动架构。

独特卖点:唯一一款能即插即用替代EventBus并透明处理IPC的库,让多进程事件驱动架构像单进程EventBus一样简单。

Architecture

技术架构

组件作用
HermesAndroid IPC框架,处理跨进程方法调用和数据序列化
EventBus标准进程内事件分发(v3.0.0)
Concurrent-Utils解决IPC操作期间的死锁和竞态条件
主进程指定协调进程,接收所有事件并重新分发

流程:事件发布 → Hermes发送至主进程 → EventBus本地分发 → Hermes转发至所有子进程。

快速入门指南

1. 添加Gradle依赖:

gradle
compile 'xiaofei.library:hermes-eventbus:0.3.0'

2. 在Application类中初始化:

java
HermesEventBus.getDefault().init(this);

3. 注册和发布事件:

java
// 注册订阅者
HermesEventBus.getDefault().register(this);

// 发布事件
HermesEventBus.getDefault().post(new Event());

// 订阅方法
@Subscribe(threadMode = ThreadMode.MAIN)
public void showText(String text) {
    textView.setText(text);
}

4. 使用完毕时清理:

java
HermesEventBus.getDefault().destroy();

5. 应用间通信需在AndroidManifest.xml中添加服务:

xml
<service android:name="xiaofei.library.hermes.HermesService$HermesService0"/>

6. 连接其他应用:

java
HermesEventBus.getDefault().connectApp(this, packageName);

优缺点与适用场景

优点

  • 无缝迁移:对现有EventBus用户友好,相同API、相同注解。
  • 自动处理复杂IPC逻辑:路由、并发、清理全自动。
  • 支持应用内和应用间通信:配置极少即可实现。
  • 文档完善:清晰的初始化和清理生命周期说明。

缺点

  • 锁定EventBus 3.0.0:使用旧版onEventXXX方法的项目需重构为@Subscribe注解。
  • 需显式调用destroy():遗忘可能导致DeadObjectException崩溃。
  • 外部依赖链:依赖Hermes和EventBus两个库,增加APK大小和依赖管理复杂度。
  • 非Kotlin优先:库基于Java,虽可在Kotlin中使用但无原生支持。

不适用人群

  • 单进程应用:若应用完全运行在单个进程中,标准EventBus更简单、依赖更少。
  • 使用EventBus 2.x及onEventXXX方法的项目:除非确实需要IPC,否则重构成本可能大于收益。
  • 需要响应式流(RxJava、Kotlin Flow)的团队:本库基于回调/注解,非响应式管道。
  • 对安全要求极高的应用间通信:应用间IPC存在固有安全风险,本库未明确处理。

理想使用场景

  • 多进程Android应用:后台服务、内容提供者或远程进程需要共享事件的应用。
  • 插件化架构:宿主应用与运行在独立进程中的插件APK通信。
  • 应用套件:同一开发者开发的多个应用需要实时事件同步(如配套应用)。
  • 将现有EventBus应用迁移至多进程架构:以最小代码改动实现。

社区活跃度

HermesEventBus拥有1,616颗星,作为解决Android开发中真实痛点的针对性方案,获得了坚实的社区认可。该项目解决了开发者在将应用扩展至单进程架构时经常遇到的难题。虽然最后更新于2026年,但该库基于稳定成熟的依赖(EventBus 3.0.0和Hermes),因此更可能是功能完备且可用于生产环境而非被弃用。对于已投入EventBus生态的团队而言,这是一款精心设计的扩展,填补了关键空白。

热点项目数据来自 GitHub API,实时更新