Andromeda是爱奇艺开源的一个Android平台上轻量级的组件间通信框架,主要特征如下:不需要开发者进行bindService操作,即可实现不同进程的任意两个组件间的IPC通信;即使不在同一进程,也可同步获取任意组件提供的服务;可根据Fragment或Activity的生命周期自行对服务进程进行提高和降低优先级的操作;支持IPC的Callback;支持针对所有进程的事件总线;在编译时可动态指定管理中心所在的进程,从而保证管理中心存活到最后。
Andromeda提供了接口式的组件间通信管理,包括同进程的本地接口调用和跨进程接口调用。
注:之所以分成本地服务和远程服务这两种,是由于本地服务的接口可以传递各种类型的参数和返回值,而远程接口则受AIDL的限制,参数和返回值只能是基本类型或者实现了Parcelable接口的自定义类型。
特色无需开发者进行bindService()操作,也不用定义Service,只需要定义aidl接口和实现
同步获取服务。抛弃了bindService()这种异步获取的方式,改造成了同步获取
生命周期自动管理。可根据Fragment或Activity的生命周期进行提高或降低服务提供方进程的操作
支持IPC的Callback,并且支持跨进程的事件总线
采用"接口+数据结构"的方式来实现组件间通信,这种方式相比协议的方式在于实现简单,维护方便
注意这里的服务不是Android中四大组件的Service,而是指提供的接口与实现。为了表示区分,后面的服务均是这个含义,而Service则是指Android中的组件。
Andromeda和其他组件间通信方案的对比如下:
使用方便性代码侵入性互操作性是否支持IPC是否支持跨进程事件总线是否支持页面跳转Andromeda好较小好YesYesNoDDComponentForAndroid较差较大差NoNoYesARouter较好较大差NoNoYes接入方式首先在buildscript中添加classpath(以1.0.0为例):
classpath "org.qiyi.video.svg:core:1.0.0" classpath "org.qiyi.video.svg:plugin:1.0.0"这两个分别是核心代码库和gradle插件库的路径。在Application或libraryModule中使用核心库:
implementation 'org.qiyi.video.svg:core:1.0.0'在ApplicationModule中使用gradle插件:
apply plugin: 'org.qiyi.svg.plugin'
评论