PieBridge,一個高效、小巧的基于Bundle的Android進(jìn)程間通信IPC框架

## PieBridge

An efficient, light, and easy-to-use framework for Android Inter-Process Communication (IPC).

一套高效、小巧、易用的基于 Bundle 的 Android 進(jìn)程間通信IPC框架。[https://github.com/kuangfrank/PieBridge](https://github.com/kuangfrank/PieBridge)

這幾天學(xué)習(xí)了愛奇藝的跨進(jìn)程通信框架——[Andromeda](https://github.com/iqiyi/Andromeda),

又研究了基于 JSON PRC 協(xié)議的 Android 跨進(jìn)程調(diào)用解決方案[Bifrost](https://github.com/LiushuiXiaoxia/Bifrost),覺得很受啟發(fā)。

Andromeda 比較適用于 App 多進(jìn)程架構(gòu)整體解決方案;而 Bifrost 通訊協(xié)議基于 Json,調(diào)用效率及對復(fù)雜類型的支持上還有進(jìn)步空間。

如果有一個框架能借用上述兩種框架的思路,簡化集成過程,并且提升跨進(jìn)程調(diào)用效率,提高對復(fù)雜類型的支持度,豈不妙哉。

這就是開發(fā) PieBridge 框架的出發(fā)點。恰逢七夕節(jié),PieBridge(鵲橋) 這個名字應(yīng)景而生,寓意 Android 進(jìn)程間的通訊暢通無阻。

PieBridge 框架基于Android原生提供的 Bundle 進(jìn)行通訊。Bundle 實現(xiàn)了 Parcelable 接口,內(nèi)部維護(hù)了 Map 數(shù)據(jù)結(jié)構(gòu),

所以既能實現(xiàn)高效的通訊,又能與各種復(fù)雜類型之間進(jìn)行轉(zhuǎn)換。

PieBridge 的 Source & Demo 請點擊 [PieBridge GitHub](https://github.com/kuangfrank/PieBridge)

PieBridge 框架,Lib 代碼僅包含4個Java文件,不過300行代碼,易學(xué)易用。

## 調(diào)用方式

Android 的跨進(jìn)程調(diào)用使用 AIDL 方式,通常要寫很多代碼,操作繁雜;不同業(yè)務(wù)的跨進(jìn)程調(diào)用,不易復(fù)用。

若使用 PieBridge 框架庫,可降低使用難度。

只需像本地調(diào)用一樣,先定義一個接口和實現(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 初始化過程中調(diào)用,請參考 Demo 應(yīng)用。

```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);

}

```

跨進(jìn)程通訊時,調(diào)用方通過ADIL 代理,將調(diào)用接口名作為參數(shù)傳入,服務(wù)方以動態(tài)代理方式調(diào)用實際的接口,返回數(shù)據(jù)。

## 小結(jié)

**優(yōu)點**

* 易學(xué)易用,簡化跨進(jìn)程編碼

* 調(diào)用高效,支持復(fù)雜數(shù)據(jù)傳輸

* 源碼不依賴任何三方庫,文件數(shù)、代碼量少,易于集成

**缺點**

* Bundle 與原始數(shù)據(jù)類型之間需要進(jìn)行轉(zhuǎn)換。即便是簡單的數(shù)據(jù)類型,也需要通過 Bundle 通訊

* 目前代碼異步調(diào)用尚未實現(xiàn),只支持同步操作

## 聯(lián)系方式及相關(guā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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容