Andromeda:Android 模块间通信,一个库搞定

📅 2026/6/28 21:45:11
Andromeda:Android 模块间通信,一个库搞定
文章目录AndromedaAndroid 模块间通信一个库搞定1、 它解决什么问题2、 核心特性3、 怎么用4、 跨进程事件总线5、 生命周期管理6、 适合什么场景AndromedaAndroid 模块间通信一个库搞定2269 Star爱奇艺开源的 Android 模块通信框架。做 Android 模块化开发的人基本都卡在同一个问题上模块之间怎么通信。本地调用还算好说跨进程就麻烦了。写 AIDL、定义 Service、手动 bindService、处理生命周期一套下来代码量不小还容易出错。Andromeda 把这些全封装了。开发者只需要写 AIDL 接口和实现剩下的事情框架自己处理。1、 它解决什么问题Android 里的模块通信本质上分两种本地服务和远程服务。本地服务就是同进程内的接口调用参数类型没有限制View、Context 这些都能传。远程服务走 IPC参数必须是基本类型或者实现了 Parcelable 的自定义类型。传统做法是每个远程服务都要写 Service 组件、手动管理 bind/unbind、处理线程切换。Andromeda 把这些全干掉了你只需要定义接口和写实现。2、 核心特性和市面上其他组件化方案比Andromeda 的优势很明显DDComponentForAndroid 不支持 IPC不支持跨进程事件总线不支持跨进程回调。ModularizationArchitecture 支持 IPC 但效率低同样没有事件总线和回调。Andromeda 三样都有而且 IPC 效率高。远程服务还能同步获取不用写异步回调等结果。3、 怎么用接入很简单。build.gradle 加一行插件依赖模块里加一行核心库依赖classpath org.qiyi.video.svg:plugin:$version implementation org.qiyi.video.svg:core:$version apply plugin: org.qiyi.svg.plugin然后在 Application 里初始化Andromeda.init(Context);注册本地服务Andromeda.registerLocalService(ICheckApple.class,newCheckApple());获取本地服务ICheckApplecheckApple(ICheckApple)Andromeda.getLocalService(ICheckApple.class);远程服务的注册和使用也类似区别是需要传 IBinderAndromeda.registerRemoteService(IBuyApple.class,BuyAppleImpl.getInstance().asBinder());使用时要先绑定生命周期确保服务端进程不会被系统回收IBinderbinderAndromeda.with(this).getRemoteService(IBuyApple.class);IBuyApplebuyAppleIBuyApple.Stub.asInterface(binder);buyApple.buyAppleInShop(29);4、 跨进程事件总线除了服务调用Andromeda 还内置了跨进程事件总线。订阅和发布都很简单// 订阅Andromeda.subscribe(EventConstants.APPLE_EVENT,listener);// 发布BundlebundlenewBundle();bundle.putString(Result,gave u five apples!);Andromeda.publish(newEvent(EventConstants.APPLE_EVENT,bundle));发布之后所有进程里的监听器都能收到事件。5、 生命周期管理远程服务的一个坑是进程优先级。如果服务端进程被杀了调用就会失败。Andromeda 的做法是把 bindService 和 Fragment/Activity 的生命周期绑定。通过Andromeda.with(activity)获取服务时框架会自动处理绑定和解绑。如果不在 Activity/Fragment 里调用或者在工作线程里调用就需要手动解绑。6、 适合什么场景适合做 Android 组件化、模块化的团队。特别是项目已经拆成多个模块模块之间有大量跨进程调用需求的情况。如果你只是同进程内的接口调用用普通的依赖注入框架就够了不需要 Andromeda。跨进程事件总线这个功能也挺实用省得自己再集成一个 EventBus 还得处理跨进程的问题。开源地址在 GitHubBSD-3-Clause 协议可以商用。Andromeda。跨进程事件总线这个功能也挺实用省得自己再集成一个 EventBus 还得处理跨进程的问题。开源地址在 GitHubBSD-3-Clause 协议可以商用。