IPC方法(綜述篇)

2021-07-10 13:42:09 字數 1481 閱讀 6244

1.bundle方式,該方式一般用於service,activity,broadcastreceiver元件間通訊,當程序a的activitya,想傳個東西給程序b的activityb,此時就可以採用bundle方式傳遞,但是有個前提就是bundle支援的資料型別有限,有時候需要對資料進行parcelable或serializable;但有時候你覺得序列化很麻煩,intentservice策略也是一種選擇,將獲取activityb所要用到的資料處理邏輯讓intentservice來處理,而intentservice也設定在程序b中,這樣在activitya中啟動下intentservice,結果馬上就出來了。

2.檔案共享,該方法簡單,但是並不適合高併發場景,儘管在android中多個程序對檔案進行讀寫沒有報錯,但是獲取資料可能存在問題,對併發訪問實時性不是很高的,可以考慮下這種方法;

3.messenger方式,注意不是message,該方式儘管底層邏輯也是aidl模式,功能一般,對高併發情景處理也不是很樂觀,當你需要伺服器和客戶端交換些資料時,可以考慮下這種方法;

4.contentprovider,這本就是android的元件,效率也不要考慮,不過也可以看成是約束性aidl,主要提供crud操作,支援一對多程序間通訊;

5.socket,有個網路經驗的自然不會陌生,但其實現細節有點繁瑣,也可以適用於網路資料交換;

6.sharedpreference,這個東西儘管大家經常用,但他不適合跨程序傳遞資料,如果喜歡它了,用contentprovider改造下即可,重點實現gettype方法。

7.aidl, 這位大神終於出來了,這無疑是大家首先想到的跨程序方式,採用它,客戶端只要bind上服務端,就可以呼叫服務端提供的功能,其實呢,通過各界面,服務端還是可以主動呼叫客戶端方法

具體細節見**:

package com.example.testservice;

import com.example.testservice.itestcallback;

inte***ce test

package com.example.testservice;

inte***ce itestcallback

客戶端繫結邏輯:
private deathrecipient mdeathrecipient = new deathrecipient() }};

private serviceconnection connection = new serviceconnection()

@override

public void onserviceconnected(componentname name, ibinder service) catch (remoteexception e) }};

private void setcallback()

});} catch (remoteexception e1)

}

RTT的IPC機制篇 IPC通訊總結

總結1 rtt通訊方式總結 2018年12月29日 10 47 ipc inter process communication 1,rtt的通訊機制 訊息佇列 郵箱 訊號量 互斥量 事件。2.我又按照其傳輸的內容分為 資料類和非資料類通訊。非資料類,執行緒間 執行緒與中斷傳輸非資料類資訊,實現執行緒...

雲計算概述 綜述篇

雲計算 cloud computing,台灣譯作雲端運算 是分布式計算技術的一種,其最基本的概念,是透過網路將龐大的計算處理程式自動分拆成無數個較小的子程式,再交由多部伺服器所組成的龐大系統經搜尋 計算分析之後將處理結果回傳給使用者。透過這項技術,網路服務提供者可以在數秒之內,達成處理數以千萬計甚至...

Linux 原理篇(一)綜述

作業系統其實就像乙個軟體外包公司,其核心就相當於這家外包公司的老闆。所以接下來的內容中,請你將自己的角色切換成這家軟體外包公司的老闆,設身處地地去理解作業系統是如何協調各種資源,幫客戶做成事情的。使用者開始對著螢幕上的 qq 圖示雙擊滑鼠了。滑鼠和鍵盤是計算機的輸入裝置。大部分的普通使用者想要告訴計...