Android探索之AIDL實現程序間通訊

2021-09-08 19:11:58 字數 2382 閱讀 9304

前言:

前面總結了程式間共享資料,可以使用contentprovider也可以使用sharedpreference,那麼程序間怎麼共享記憶體呢?android系統中的程序之間不能共享記憶體,因此,需要提供一些機制在不同程序之間進行資料通訊。

為了使其他的應用程式也可以訪問本應用程式提供的服務,android系統採用了遠端過程呼叫(remote procedure call,rpc)方式來實現。與很多其他的基於rpc的解決方案一樣,android使用一種介面定義語言(inte***ce definition language,idl)來公開服務的介面。我們知道4個android應用程式元件中的3個(activity、broadcastreceiver和contentprovider)都可以進行跨程序訪問,另外乙個android應用程式元件service同樣可以。因此,可以將這種可以跨程序訪問的服務稱為aidl(android inte***ce definition language)服務。

接下來實戰一下具體實現:

1.)首先新建乙個aidl檔案

inte***ce

itestinte***ce

aidl語法解說:

2.)服務端實現介面

private

final itestinte***ce.stub mbinder = new

itestinte***ce.stub()

//處理字串

public

string dealstring( string srcstring)

//字串追加

public

3.)客戶端獲取介面

private  serviceconnection connection = new

serviceconnection()

@override

public

void

onserviceconnected(componentname name, ibinder service)

catch

(remoteexception e)

}};

4.)通過ipc呼叫/傳遞資料

int remoteid=itestinte***ce.getprocessid();

log.e("testservice","testservice remoteid---->"+remoteid);

int currentpid =android.os.process.mypid();

log.e("testservice","testservice currentpid---->"+currentpid);

log.e("testservice","testservice dealstring---->"+itestinte***ce.dealstring("remote service"));

5.)service宣告以及繫結/解綁 

宣告:<

service

android:name

=".testservice"

android:enabled

="true"

android:exported

="true"

android:label

="remoteservice"

android:process

=":remote"

>

<

intent-filter

android:priority

="1000"

>

<

category

android:name

="android.intent.category.default"

/>

<

action

android:name

="com.whoislcj.testaidl.testservice"

/>

intent-filter

>

service

>

繫結:

intent intent = new intent("com.whoislcj.testaidl.testservice");

intent.setpackage(getpackagename());

//這裡你需要設定你應用的包名

bindservice(intent, connection, context.bind_auto_create);

解綁:

unbindservice(connection);

6.)訪問許可權同service一致

AI DL方法與問題空間探索

所謂問題的解決是生存引數空間的一種狀態轉移到另外一種狀態,而目的狀態恰好是主體所希望的。完成這種轉換的一系列指令碼變化過程叫做場景序列,也叫通路。驅動這一些列場景轉換的主體參與過程,被稱為主動執行。而主體參與執行過程所抽象出來的主動參與行為規則,被稱為解決問題的方法。狀態空間轉換總有一條最短時間轉換...

Android 程序間通訊AIDL學習

aidl android inte cedefinition language,即安卓介面定義語言,它是一種android內部程序通訊介面的描述語言,通過它我們可以定義程序間的通訊介面 ipc inter processcommunication 內部程序通訊 首先實現aidl遠端服務 1,新建as...

Android 中的AIDL 和 binder機制

2.1 初識bindler android程序間的通訊基於binder機制,binder並非linux系統標準的通訊機制,android系統選定binder這種機制實現程序間通訊基於以下幾個考慮 1,效率高。相對於低效的socket,兩次複製的管道,使用了記憶體對映的binder效率高,只需一次複製...