Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲

AIDL

編輯:關於Android編程

官網地址詳解分析:
http://developer.android.com/guide/components/aidl.html
一)什麼是AIDL –》 應用場景 –》 為什麼用它–》什麼情況下試用
個人理解: aidl應用接口編程語言 因為android系統中的不同程序都有自己的jvm,不同程序之間是不能直接訪問對方memory的,為了安全,彼此解耦,一個程序崩潰不至於對其它程序的影響。 那麼在android系統中的機制設置成ipc機制,不同應用程序之間通過操作系統可以識別的語言aidl來進行通信。 在多Application 和多Thread情況下使用。
這裡寫圖片描述

官網上說的和詳細:

AIDL (Android Interface Definition Language) is similar to other IDLs you might have worked with. It allows you to define the programming interface that both the client and service agree upon in Z喎?/kf/ware/vc/" target="_blank" class="keylink">vcmRlciB0byBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIgdXNpbmcgaW50ZXJwcm9jZXNzIGNvbW11bmljYXRpb24gKElQQykuIE9uIEFuZHJvaWQsIG9uZSBwcm9jZXNzIGNhbm5vdCBub3JtYWxseSBhY2Nlc3MgdGhlIG1lbW9yeSBvZiBhbm90aGVyIHByb2Nlc3MuIFNvIHRvIHRhbGssIHRoZXkgbmVlZCB0byBkZWNvbXBvc2UgdGhlaXIgb2JqZWN0cyBpbnRvIHByaW1pdGl2ZXMgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYW4gdW5kZXJzdGFuZCwgYW5kIG1hcnNoYWxsIHRoZSBvYmplY3RzIGFjcm9zcyB0aGF0IGJvdW5kYXJ5IGZvciB5b3UuIFRoZSBjb2RlIHRvIGRvIHRoYXQgbWFyc2hhbGxpbmcgaXMgdGVkaW91cyB0byB3cml0ZSwgc28gQW5kcm9pZCBoYW5kbGVzIGl0IGZvciB5b3Ugd2l0aCBBSURMLjwvcD4NCgk8cD5Ob3RlOiBVc2luZyBBSURMIGlzIG5lY2Vzc2FyeSBvbmx5IGlmIHlvdSBhbGxvdyBjbGllbnRzIGZyb20gZGlmZmVyZW50IGFwcGxpY2F0aW9ucyB0byBhY2Nlc3MgeW91ciBzZXJ2aWNlIGZvciBJUEMgYW5kIHdhbnQgdG8gaGFuZGxlIG11bHRpdGhyZWFkaW5nIGluIHlvdXIgc2VydmljZS4gSWYgeW91IGRvIG5vdCBuZWVkIHRvIHBlcmZvcm0gY29uY3VycmVudCBJUEMgYWNyb3NzIGRpZmZlcmVudCBhcHBsaWNhdGlvbnMsIHlvdSBzaG91bGQgY3JlYXRlIHlvdXIgaW50ZXJmYWNlIGJ5IGltcGxlbWVudGluZyBhIEJpbmRlciBvciwgaWYgeW91IHdhbnQgdG8gcGVyZm9ybSBJUEMsIGJ1dCBkbyBub3QgbmVlZCB0byBoYW5kbGUgbXVsdGl0aHJlYWRpbmcsIGltcGxlbWVudCB5b3VyIGludGVyZmFjZSB1c2luZyBhIE1lc3Nlbmdlci4gUmVnYXJkbGVzcywgYmUgc3VyZSB0aGF0IHlvdSB1bmRlcnN0YW5kIEJvdW5kIFNlcnZpY2VzIGJlZm9yZSBpbXBsZW1lbnRpbmcgYW4gQUlETC48L3A+DQoJPHA+QmVmb3JlIHlvdSBiZWdpbiBkZXNpZ25pbmcgeW91ciBBSURMIGludGVyZmFjZSwgYmUgYXdhcmUgdGhhdCBjYWxscyB0byBhbiBBSURMIGludGVyZmFjZSBhcmUgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiBZb3Ugc2hvdWxkIG5vdCBtYWtlIGFzc3VtcHRpb25zIGFib3V0IHRoZSB0aHJlYWQgaW4gd2hpY2ggdGhlIGNhbGwgb2NjdXJzLiBXaGF0IGhhcHBlbnMgaXMgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBjYWxsIGlzIGZyb20gYSB0aHJlYWQgaW4gdGhlIGxvY2FsIHByb2Nlc3Mgb3IgYSByZW1vdGUgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5OjwvcD4NCgk8cD5DYWxscyBtYWRlIGZyb20gdGhlIGxvY2FsIHByb2Nlc3MgYXJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIHRocmVhZCB0aGF0IGlzIG1ha2luZyB0aGUgY2FsbC4gSWYgdGhpcyBpcyB5b3VyIG1haW4gVUkgdGhyZWFkLCB0aGF0IHRocmVhZCBjb250aW51ZXMgdG8gZXhlY3V0ZSBpbiB0aGUgQUlETCBpbnRlcmZhY2UuIElmIGl0IGlzIGFub3RoZXIgdGhyZWFkLCB0aGF0IGlzIHRoZSBvbmUgdGhhdCBleGVjdXRlcyB5b3VyIGNvZGUgaW4gdGhlIHNlcnZpY2UuIFRodXMsIGlmIG9ubHkgbG9jYWwgdGhyZWFkcyBhcmUgYWNjZXNzaW5nIHRoZSBzZXJ2aWNlLCB5b3UgY2FuIGNvbXBsZXRlbHkgY29udHJvbCB3aGljaCB0aHJlYWRzIGFyZSBleGVjdXRpbmcgaW4gaXQgKGJ1dCBpZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGVuIHlvdSBzaG91bGRuJnJzcXVvO3QgYmUgdXNpbmcgQUlETCBhdCBhbGwsIGJ1dCBzaG91bGQgaW5zdGVhZCBjcmVhdGUgdGhlIGludGVyZmFjZSBieSBpbXBsZW1lbnRpbmcgYSBCaW5kZXIpLjwvcD4NCgk8cD5UaGUgb25ld2F5IGtleXdvcmQgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHJlbW90ZSBjYWxscy4gV2hlbiB1c2VkLCBhIHJlbW90ZSBjYWxsIGRvZXMgbm90IGJsb2NrOyBpdCBzaW1wbHkgc2VuZHMgdGhlIHRyYW5zYWN0aW9uIGRhdGEgYW5kIGltbWVkaWF0ZWx5IHJldHVybnMuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJmYWNlIGV2ZW50dWFsbHkgcmVjZWl2ZXMgdGhpcyBhcyBhIHJlZ3VsYXIgY2FsbCBmcm9tIHRoZSBCaW5kZXIgdGhyZWFkIHBvb2wgYXMgYSBub3JtYWwgcmVtb3RlIGNhbGwuIElmIG9uZXdheSBpcyB1c2VkIHdpdGggYSBsb2NhbCBjYWxsLCB0aGVyZSBpcyBubyBpbXBhY3QgYW5kIHRoZSBjYWxsIGlzIHN0aWxsIHN5bmNocm9ub3VzLjwvcD4NCjwvYmxvY2txdW90ZT4NCjxwPrb+o6lhaWRstcTKudPDPGJyIC8+DQo8aW1nIGFsdD0="這裡寫圖片描述" src="/uploadfile/Collfiles/20160421/20160421091338183.png" title="\" />
假設我們有這樣的需求【其它部門有現有的庫,我們拿來直接用】
service端根據client端輸入的兩個數,相加計算和然後返回
這裡寫圖片描述
1)在eclipse和AndroidStudio中自動創建方式不一樣,可自行度娘。
定義的aidl文件如下:
這裡寫圖片描述
2)創建了aidl後。實現:基於服務,實現aidl的接口,返回的是binder信使,當activity綁定服務之後,即可得到實現aidl的信使,然後調用服務端的方法。
這裡寫圖片描述

3)服務端完成以上任務後,接下來就是client需要做的事情了。aidl語言實現ipc通信,那麼client和server需要使用同一套aidl規則。那麼直接將服務端的aidl接口文件拿到client端就行了。

綁定服務
這裡寫圖片描述

綁定的時候需要拿到連接的回掉:
這裡寫圖片描述
在回掉中我們已經通過服務端的信使Binder對象,拿到了aidl的service對象,直接調用方法即可。。。
記住:在onDestory()方法中需要解綁。

支持數據類型:
這裡寫圖片描述
不支持short類型:在自定義類型時候,實現Parcelable時候,沒有writeshort方法的,在d操作系統內部也沒有這個方法。

一定要區別於Binder和Messager的使用,基於操作系統的操作,耗資源耗時間,只在ipc多線程情況下使用。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved