PieBridge
An efficient, light, and easy-to-use framework for Android Inter-Process Communication (IPC).
一套高效辅肾、小巧、易用的基于 Bundle 的 Android 進程間通信IPC框架轮锥。https://github.com/kuangfrank/PieBridge
這幾天學習了愛奇藝的跨進程通信框架——Andromeda矫钓,又研究了基于 JSON PRC 協(xié)議的 Android 跨進程調用解決方案Bifrost,覺得很受啟發(fā)舍杜。
Andromeda 比較適用于 App 多進程架構整體解決方案新娜;而 Bifrost 通訊協(xié)議基于 Json,調用效率及對復雜類型的支持上還有進步空間既绩。
如果有一個框架能借用上述兩種框架的思路杯活,簡化集成過程,并且提升跨進程調用效率熬词,提高對復雜類型的支持度,豈不妙哉吸重。
這就是開發(fā) PieBridge 框架的出發(fā)點互拾。恰逢七夕節(jié),PieBridge(鵲橋) 這個名字應景而生嚎幸,寓意 Android 進程間的通訊暢通無阻颜矿。
PieBridge 框架基于Android原生提供的 Bundle 進行通訊。Bundle 實現(xiàn)了 Parcelable 接口嫉晶,內(nèi)部維護了 Map<String,Object> 數(shù)據(jù)結構骑疆,所以既能實現(xiàn)高效的通訊,又能與各種復雜類型之間進行轉換替废。
PieBridge 的 Source & Demo 請點擊 PieBridge GitHub
PieBridge 框架箍铭,Lib 代碼僅包含4個Java文件,不過300行代碼椎镣,易學易用诈火。
調用方式
Android 的跨進程調用使用 AIDL 方式,通常要寫很多代碼状答,操作繁雜冷守;不同業(yè)務的跨進程調用刀崖,不易復用。
若使用 PieBridge 框架庫拍摇,可降低使用難度亮钦。
只需像本地調用一樣,先定義一個接口和實現(xiàn)類。
public interface IBookApi {
Bundle insertBookListMethod(Bundle param);
Bundle deleteBookListMethod(Bundle param);
...
}
public class BookApiImpl implements IBookApi {
@Override
public Bundle insertBookListMethod(Bundle param) {
ArrayList<Book> tmpList = BookApiUtil.fromBundle(param);
sBookList.addAll(tmpList);
Bundle result = BookApiUtil.toBundle(sBookList);
return result;
}
@Override
public Bundle deleteBookListMethod(Bundle param) {
...
return result;
}
...
}
再注冊接口和實現(xiàn)類框产,在 Application 初始化過程中調用柱衔,請參考 Demo 應用。
public class MainApp extends Application {
...
@Override
public void onCreate() {
super.onCreate();
if (isMainProcess(this)) {
PieBridge.getInstance().init(this);
} else if (isPieBridgeProcess(this)) {
PieBridge.getInstance().register(IBookApi.class, BookApiImpl.getInstance());
}
}
}
基本原理
定義通用ADIL接口
import android.os.Bundle;
interface IPieBridgeAidl {
Bundle call(in Bundle args);
}
跨進程通訊時巡语,調用方通過ADIL 代理,將調用接口名作為參數(shù)傳入淮菠,服務方以動態(tài)代理方式調用實際的接口男公,返回數(shù)據(jù)。
小結
優(yōu)點
- 易學易用合陵,簡化跨進程編碼
- 調用高效枢赔,支持復雜數(shù)據(jù)傳輸
- 源碼不依賴任何三方庫,文件數(shù)拥知、代碼量少踏拜,易于集成
缺點
- Bundle 與原始數(shù)據(jù)類型之間需要進行轉換。即便是簡單的數(shù)據(jù)類型低剔,也需要通過 Bundle 通訊
- 目前代碼異步調用尚未實現(xiàn)速梗,只支持同步操作
聯(lián)系方式及相關鏈接
本人e-mail: kuangrenjin@qq.com