## PieBridge
An efficient, light, and easy-to-use framework for Android Inter-Process Communication (IPC).
一套高效、小巧伶跷、易用的基于 Bundle 的 Android 進程間通信IPC框架掰读。[https://github.com/kuangfrank/PieBridge](https://github.com/kuangfrank/PieBridge)
這幾天學習了愛奇藝的跨進程通信框架——[Andromeda](https://github.com/iqiyi/Andromeda),
又研究了基于 JSON PRC 協(xié)議的 Android 跨進程調用解決方案[Bifrost](https://github.com/LiushuiXiaoxia/Bifrost)叭莫,覺得很受啟發(fā)蹈集。
Andromeda 比較適用于 App 多進程架構整體解決方案;而 Bifrost 通訊協(xié)議基于 Json雇初,調用效率及對復雜類型的支持上還有進步空間拢肆。
如果有一個框架能借用上述兩種框架的思路,簡化集成過程,并且提升跨進程調用效率郭怪,提高對復雜類型的支持度支示,豈不妙哉。
這就是開發(fā) PieBridge 框架的出發(fā)點鄙才。恰逢七夕節(jié)悼院,PieBridge(鵲橋) 這個名字應景而生,寓意 Android 進程間的通訊暢通無阻咒循。
PieBridge 框架基于Android原生提供的 Bundle 進行通訊据途。Bundle 實現(xiàn)了 Parcelable 接口,內部維護了 Map 數(shù)據(jù)結構叙甸,
所以既能實現(xiàn)高效的通訊颖医,又能與各種復雜類型之間進行轉換。
PieBridge 的 Source & Demo 請點擊 [PieBridge GitHub](https://github.com/kuangfrank/PieBridge)
PieBridge 框架裆蒸,Lib 代碼僅包含4個Java文件熔萧,不過300行代碼,易學易用僚祷。
## 調用方式
Android 的跨進程調用使用 AIDL 方式佛致,通常要寫很多代碼,操作繁雜辙谜;不同業(yè)務的跨進程調用俺榆,不易復用。
若使用 PieBridge 框架庫装哆,可降低使用難度罐脊。
只需像本地調用一樣,先定義一個接口和實現(xiàn)類蜕琴。
```java
public interface IBookApi {
Bundle insertBookListMethod(Bundle param);
Bundle deleteBookListMethod(Bundle param);
...
}
```
```java
public class BookApiImpl implements IBookApi {
@Override
public Bundle insertBookListMethod(Bundle param) {
ArrayList 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 應用凌简。
```java
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接口
```java
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
[PieBridge GitHub](https://github.com/kuangfrank/PieBridge)
[Andromeda GitHub](https://github.com/iqiyi/Andromeda)
[Bifrost GitHub](https://github.com/LiushuiXiaoxia/Bifrost)