欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

AIDL

来源: 开发者 投稿于  被查看 45142 次 评论:236

AIDL


官网地址详解分析:
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喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcmRlciB0byBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIgdXNpbmcgaW50ZXJwcm9jZXNzIGNvbW11bmljYXRpb24gKElQQykuIE9uIEFuZHJvaWQsIG9uZSBwcm9jZXNzIGNhbm5vdCBub3JtYWxseSBhY2Nlc3MgdGhlIG1lbW9yeSBvZiBhbm90aGVyIHByb2Nlc3MuIFNvIHRvIHRhbGssIHRoZXkgbmVlZCB0byBkZWNvbXBvc2UgdGhlaXIgb2JqZWN0cyBpbnRvIHByaW1pdGl2ZXMgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYW4gdW5kZXJzdGFuZCwgYW5kIG1hcnNoYWxsIHRoZSBvYmplY3RzIGFjcm9zcyB0aGF0IGJvdW5kYXJ5IGZvciB5b3UuIFRoZSBjb2RlIHRvIGRvIHRoYXQgbWFyc2hhbGxpbmcgaXMgdGVkaW91cyB0byB3cml0ZSwgc28gQW5kcm9pZCBoYW5kbGVzIGl0IGZvciB5b3Ugd2l0aCBBSURMLjwvcD4NCgk8cD5Ob3RlOiBVc2luZyBBSURMIGlzIG5lY2Vzc2FyeSBvbmx5IGlmIHlvdSBhbGxvdyBjbGllbnRzIGZyb20gZGlmZmVyZW50IGFwcGxpY2F0aW9ucyB0byBhY2Nlc3MgeW91ciBzZXJ2aWNlIGZvciBJUEMgYW5kIHdhbnQgdG8gaGFuZGxlIG11bHRpdGhyZWFkaW5nIGluIHlvdXIgc2VydmljZS4gSWYgeW91IGRvIG5vdCBuZWVkIHRvIHBlcmZvcm0gY29uY3VycmVudCBJUEMgYWNyb3NzIGRpZmZlcmVudCBhcHBsaWNhdGlvbnMsIHlvdSBzaG91bGQgY3JlYXRlIHlvdXIgaW50ZXJmYWNlIGJ5IGltcGxlbWVudGluZyBhIEJpbmRlciBvciwgaWYgeW91IHdhbnQgdG8gcGVyZm9ybSBJUEMsIGJ1dCBkbyBub3QgbmVlZCB0byBoYW5kbGUgbXVsdGl0aHJlYWRpbmcsIGltcGxlbWVudCB5b3VyIGludGVyZmFjZSB1c2luZyBhIE1lc3Nlbmdlci4gUmVnYXJkbGVzcywgYmUgc3VyZSB0aGF0IHlvdSB1bmRlcnN0YW5kIEJvdW5kIFNlcnZpY2VzIGJlZm9yZSBpbXBsZW1lbnRpbmcgYW4gQUlETC48L3A+DQoJPHA+QmVmb3JlIHlvdSBiZWdpbiBkZXNpZ25pbmcgeW91ciBBSURMIGludGVyZmFjZSwgYmUgYXdhcmUgdGhhdCBjYWxscyB0byBhbiBBSURMIGludGVyZmFjZSBhcmUgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiBZb3Ugc2hvdWxkIG5vdCBtYWtlIGFzc3VtcHRpb25zIGFib3V0IHRoZSB0aHJlYWQgaW4gd2hpY2ggdGhlIGNhbGwgb2NjdXJzLiBXaGF0IGhhcHBlbnMgaXMgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBjYWxsIGlzIGZyb20gYSB0aHJlYWQgaW4gdGhlIGxvY2FsIHByb2Nlc3Mgb3IgYSByZW1vdGUgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5OjwvcD4NCgk8cD5DYWxscyBtYWRlIGZyb20gdGhlIGxvY2FsIHByb2Nlc3MgYXJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIHRocmVhZCB0aGF0IGlzIG1ha2luZyB0aGUgY2FsbC4gSWYgdGhpcyBpcyB5b3VyIG1haW4gVUkgdGhyZWFkLCB0aGF0IHRocmVhZCBjb250aW51ZXMgdG8gZXhlY3V0ZSBpbiB0aGUgQUlETCBpbnRlcmZhY2UuIElmIGl0IGlzIGFub3RoZXIgdGhyZWFkLCB0aGF0IGlzIHRoZSBvbmUgdGhhdCBleGVjdXRlcyB5b3VyIGNvZGUgaW4gdGhlIHNlcnZpY2UuIFRodXMsIGlmIG9ubHkgbG9jYWwgdGhyZWFkcyBhcmUgYWNjZXNzaW5nIHRoZSBzZXJ2aWNlLCB5b3UgY2FuIGNvbXBsZXRlbHkgY29udHJvbCB3aGljaCB0aHJlYWRzIGFyZSBleGVjdXRpbmcgaW4gaXQgKGJ1dCBpZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGVuIHlvdSBzaG91bGRuJnJzcXVvO3QgYmUgdXNpbmcgQUlETCBhdCBhbGwsIGJ1dCBzaG91bGQgaW5zdGVhZCBjcmVhdGUgdGhlIGludGVyZmFjZSBieSBpbXBsZW1lbnRpbmcgYSBCaW5kZXIpLjwvcD4NCgk8cD5UaGUgb25ld2F5IGtleXdvcmQgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHJlbW90ZSBjYWxscy4gV2hlbiB1c2VkLCBhIHJlbW90ZSBjYWxsIGRvZXMgbm90IGJsb2NrOyBpdCBzaW1wbHkgc2VuZHMgdGhlIHRyYW5zYWN0aW9uIGRhdGEgYW5kIGltbWVkaWF0ZWx5IHJldHVybnMuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJmYWNlIGV2ZW50dWFsbHkgcmVjZWl2ZXMgdGhpcyBhcyBhIHJlZ3VsYXIgY2FsbCBmcm9tIHRoZSBCaW5kZXIgdGhyZWFkIHBvb2wgYXMgYSBub3JtYWwgcmVtb3RlIGNhbGwuIElmIG9uZXdheSBpcyB1c2VkIHdpdGggYSBsb2NhbCBjYWxsLCB0aGVyZSBpcyBubyBpbXBhY3QgYW5kIHRoZSBjYWxsIGlzIHN0aWxsIHN5bmNocm9ub3VzLjwvcD4NCjwvYmxvY2txdW90ZT4NCjxwPrb+o6lhaWRstcTKudPDPGJyIC8+DQo8aW1nIGFsdD0="这里写图片描述" src="http://www.2cto.com/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()方法中需要解绑。

支持数据类型:
这里写图片描述系统内部也没有这个方法。

一定要区别于Binder和Messager的使用,基于操作系统的操作,耗资源耗时间,只在ipc多线程情况下使用。

用户评论