Android中的IPC方式

2021-07-11 04:01:07 字數 1470 閱讀 7642

binder中有倆很重要的方法linktodeath和unlinktodeath.通過linktodeath我們可以額給binder設定乙個死亡**,當binder掛掉時,我們就會接到通知,此時我們可以重新發起鏈結請求從而恢復鏈結。

首先:宣告乙個deathrecipient對像

mdeathrecipient = new deathrecipient() 

};

繫結成功後給binder設定死亡**

mservice = imessageboxmanager.stub

.asinte***ce(binder);

binder.linktodeath(mdeathrecipient,0);

齊活~

大概清楚了序列化和binder後 開始了解跨程序通訊。

1. 使用bundle:

由於bundle實現了parcelable介面,所以他可以方便的在不同的程序間傳輸,當我們在乙個程序中啟動了另乙個程序的activity、service和receiver,我們就可以在bundle中附加各種資訊然後通過intent傳送。

有一種特殊場景:

a程序在進行乙個計算,計算完後啟動b程序的乙個元件並把計算結果 傳遞給b,如果這個計算結果不支援放入bundle中,因此無法通過intent來傳輸,此時可以考慮如下方式:通過intent啟動b的乙個service元件,讓service在後台進行運算,計算完畢啟動b中的目標元件。齊活~

2. 使用檔案共享

兩個程序通過讀/寫同乙個檔案來交換資料。這種方式對於檔案格式沒有具體的要求,可以是文字檔案,也可以是xml檔案,只要讀/寫雙方約定資料格式即可。這種方式也是有侷限性的,比如說併發讀/寫問題。如果併發讀/寫,那麼有可能讀出的內容不是最新的,如果併發寫問題會很嚴重,所以要盡量避免併發寫這種情況或者考慮使用執行緒同步來限制多個執行緒的寫操作。(不建議在程序間通訊中使用sharedpreferences)

3.使用messenger

我們可以通過messenger在不同程序中傳遞message對像,在message中放入我們需要傳遞的資料。messenger是一種輕量級的ipc方案,他的底層實現是aidl。實現乙個messenger有如下幾個步驟,分別為服務端和客戶端:

服務端

建立乙個service處理客戶端的連線請求,建立乙個handler並通過handler建立乙個messenger對像,然後再service的onbind中返回這個messenger對像底層的binder即可。

客戶端

首先繫結服務端的service,用伺服器返回的ibinder對像建立乙個messenger,通過messenger就可以向伺服器傳送訊息了,傳送訊息型別為message對像。

android實現程序間通訊(IPC)的方式

messenger的底層是aidl 基於proxy stub模式說明,具體參以前部落格。其實最核心的是aidl介面的定義。服務端 1.服務端首先要建立乙個service用來監聽客戶端的鏈結請求 2.然後建立乙個aidl檔案,將暴露給客戶端的介面在這個aidl檔案中宣告。3.最後在service中實現...

IPC通訊的幾種方式

為什麼要進行程序間的通訊 ipc inter process communication 資料傳輸 乙個程序需要將它的資料傳送給另乙個程序,傳送的資料量在乙個位元組到幾m位元組之間 共享資料 多個程序想要操作共享資料,乙個程序對共享資料的修改,別的程序應該立刻看到。通知事件 乙個程序需要向另乙個或一...

程序間的通訊 IPC 方式

記憶體對映 為什麼要進行程序間的通訊 ipc inter process communication 資料傳輸 乙個程序需要將它的資料傳送給另乙個程序,傳送的資料量在乙個位元組到幾m位元組之間 共享資料 多個程序想要操作共享資料,乙個程序對共享資料的修改,別的程序應該立刻看到。通知事件 乙個程序需要...