Andromeda:爱奇艺开源的 Android 组件通信框架
文章目录
- Andromeda:爱奇艺开源的 Android 组件通信框架
Andromeda:爱奇艺开源的 Android 组件通信框架
爱奇艺开源的 Android 组件化通信框架 Andromeda,在 GitHub 上收获了 2,269 个 Star。
Andromeda 解决的是 Android 模块化开发中各模块之间的通信问题。它同时支持本地服务和远程服务(跨进程),开发者只需要定义 AIDL 接口并提供实现,不需要手动 bindService,也不需要定义 Android Service 组件。
核心能力
Andromeda 提供了几个关键特性:
远程服务可以同步获取,不必像传统方式那样只能异步回调。框架会根据 Fragment 或 Activity 的生命周期自动管理进程优先级,防止服务端进程被系统回收。跨进程回调(IPC Callback)也是支持的,框架还提供了 BaseCallback 类,把回调自动切换到 UI 线程,省去开发者手动切换的麻烦。
除了点对点的服务调用,Andromeda 还内置了跨进程的事件总线。任何进程中的模块都可以发布事件,其他进程中订阅了同名事件的监听器都能收到。Event 对象由事件名称和 Bundle 数据组成,可以携带基本类型或 Parcelable 类型的参数。
接入方式
接入 Andromeda 分三步。第一步在 buildscript 中添加 Gradle 插件依赖,第二步在 Application 或 Library 模块中引入 core 库,第三步在 Application 模块中 apply 插件。
初始化只需要在 Application.onCreate() 中调用一行代码。之后就可以通过 registerLocalService 注册本地服务,通过 registerRemoteService 注册远程服务。获取服务也很直接,本地服务用 getLocalService,远程服务用 with(fragment).getRemoteService。
与其他方案的对比
在 Andromeda 的 README 中,有一张它与其他组件化方案的对比表。相比 DDComponentForAndroid 和 ModularizationArchitecture,Andromeda 在便利性、IPC 效率、跨进程通信、跨进程事件总线和跨进程回调这几个维度上都有优势。
使用注意
框架要求 Dispatcher 进程必须是存活时间最长的进程,默认是主进程。如果你的应用中某个进程(比如音乐播放器的后台进程)比主进程存活更久,需要在 build.gradle 中手动配置 Dispatcher 的进程名。
远程服务的参数类型只能是基本类型或实现了 Parcelable 的自定义类型,本地服务则没有这个限制,可以传递 View、Context 等任意类型。
该项目采用 BSD-3-Clause 开源协议。
等任意类型。
该项目采用 BSD-3-Clause 开源协议。
