AIDL旅行记之AIDL的简单使用
2016-04-12 21:38
405 查看
上篇文章中,我们简单介绍了在Android的几种IPC通信方式,以及AIDL的简单分析。还没有阅读的小伙伴猛戳这里哦:AIDL旅行记之开篇AIDL基本介绍
今天我将和小伙伴们一起来探讨在Android中,我们该如何使用AIDL。
使用AIDL的流程相对来说比较简单,但是细节的地方还是需要我们注意的。下面一起来看下官方文档为我们提供的创建过程:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/521ce6809b16a0804dd12367dd2d1f09)
从官方文档中,我们可以看出,使用AIDL总共分为了三步:
(1)create .aidl file:即创建AIDL文件
(2)实现Binder接口
(3)实现Service并重写onBind()方法,在该方法中,将我们第二步实现的Bindler返回。
了解了使用AIDL的创建过程,下面我将以Android Studio的IDE开发环境为基础,一步一步来实现AIDL的创建。
首先我们实现第一步,创建aidl文件,下面看官方文档的介绍:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/97df3be795da80e339c18928b3e9614b)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/2d60fd1944b01a664a10f1b2646d5202)
上面官方文档中,简单说明了第一步的实现流程,我总结以下几点要注意的地方:
(1)在AIDL中,我们可以使用基本数据类型、List、Map、String、CharSequence。这里需要注意,官方文档对于这块的描述略为粗略,在AIDL中可以使用基本数据类型,但是Short型的是排除在外的。也就是说,在AIDL中,我们是不可以使用Short型的。
(1)在Aidl中,如果提供的接口需要传入参数,我们必须声明:in,out inout。
三种情况分别是:输入参数,输出参数,输入输出参数。
(3)如果使用了自定义的类型(比如自定义了Student类),此时在Aidl文件中,还需要用import将其包含进来。
第二步:实现自定义的接口
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/f2b9b0e79cda48be86e55d152e977061)
图中,我们可以看出,我们在第一步中创建的接口,在Service中需要去实现这个接口,并在Service的onBind()方法中返回。即上图所示。在接口的方法中,我们就可以实现具体的业务逻辑。
第三步:实现Service,返回我们自定义的Aidl文件接口。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/2f01309a01366f3ff0d75b4200f81cf7)
上面3步创建完成后,我们服务端的Aidl就算完成了。
有了服务端,此时我们需要创建客户端,即另一个进程。在另一个进程去访问我们的服务端。
创建客户端,就比较简单了。此处我就简单说下流程:因为要在客户端访问服务端的接口,所以我门首先要将服务端定义的Aidl文件全部复制到客户端的aidl。此处要注意包名不能错。如果我们自定义了类型。此时也需要将自定义的类复制到客户端。基础工作完成后,现在就需要我们去开启Service,此处更准确的说应该是绑定Service。因为我们需要和服务端进行通信,需要接受服务端返回的数据。所以单纯的startService这种方式是不行的。绑定Service,我们需要实现ServiceConnection。在ServiceConnection中我们需要实现两个方法,即连接成功,和断开连接。在连接成功这个方法中,我们就可以获取Bindr。进行通信了。下一篇,我将带大家一起编写一个小例子,加深对Aidl的使用过程。
今天我将和小伙伴们一起来探讨在Android中,我们该如何使用AIDL。
使用AIDL的流程相对来说比较简单,但是细节的地方还是需要我们注意的。下面一起来看下官方文档为我们提供的创建过程:
从官方文档中,我们可以看出,使用AIDL总共分为了三步:
(1)create .aidl file:即创建AIDL文件
(2)实现Binder接口
(3)实现Service并重写onBind()方法,在该方法中,将我们第二步实现的Bindler返回。
了解了使用AIDL的创建过程,下面我将以Android Studio的IDE开发环境为基础,一步一步来实现AIDL的创建。
首先我们实现第一步,创建aidl文件,下面看官方文档的介绍:
上面官方文档中,简单说明了第一步的实现流程,我总结以下几点要注意的地方:
(1)在AIDL中,我们可以使用基本数据类型、List、Map、String、CharSequence。这里需要注意,官方文档对于这块的描述略为粗略,在AIDL中可以使用基本数据类型,但是Short型的是排除在外的。也就是说,在AIDL中,我们是不可以使用Short型的。
(1)在Aidl中,如果提供的接口需要传入参数,我们必须声明:in,out inout。
三种情况分别是:输入参数,输出参数,输入输出参数。
(3)如果使用了自定义的类型(比如自定义了Student类),此时在Aidl文件中,还需要用import将其包含进来。
第二步:实现自定义的接口
图中,我们可以看出,我们在第一步中创建的接口,在Service中需要去实现这个接口,并在Service的onBind()方法中返回。即上图所示。在接口的方法中,我们就可以实现具体的业务逻辑。
第三步:实现Service,返回我们自定义的Aidl文件接口。
上面3步创建完成后,我们服务端的Aidl就算完成了。
有了服务端,此时我们需要创建客户端,即另一个进程。在另一个进程去访问我们的服务端。
创建客户端,就比较简单了。此处我就简单说下流程:因为要在客户端访问服务端的接口,所以我门首先要将服务端定义的Aidl文件全部复制到客户端的aidl。此处要注意包名不能错。如果我们自定义了类型。此时也需要将自定义的类复制到客户端。基础工作完成后,现在就需要我们去开启Service,此处更准确的说应该是绑定Service。因为我们需要和服务端进行通信,需要接受服务端返回的数据。所以单纯的startService这种方式是不行的。绑定Service,我们需要实现ServiceConnection。在ServiceConnection中我们需要实现两个方法,即连接成功,和断开连接。在连接成功这个方法中,我们就可以获取Bindr。进行通信了。下一篇,我将带大家一起编写一个小例子,加深对Aidl的使用过程。
相关文章推荐
- hdu 5178 pairs
- Maven父子项目打包子项目出现Failed to collect dependencies问题
- CDISC SDTM DM domain 学习笔记
- 【codeforces 651B - Beautiful Paintings 】 greedy(贪心)
- 完全教程 Aircrack-ng破解WEP、WPA-PSK加密利器 [MARK]
- LeetCode 219. Contains Duplicate II
- AIDL旅行记之开篇AIDL基本介绍
- hdu 5175 Misaki's Kiss again
- C - Sorting Railway Cars
- 《机器学习实战》学习笔记(四):Naive Bayes
- Climbing Stairs
- HDU-1039-Easier Done Than Said?
- 集合类 Contains 方法 深入详解 与接口的实例
- 天池新人实战赛----阿里移动推荐算法大赛(御膳房、DTPAI----ODPS初体验)
- 线程间协作:wait,notify,notifyAll,join,yield
- failed to lazily initialize a collection of role:XXX, no sessi
- GoAhead 2.1.8嵌入式webserver源码分析学习(三)---main函数分析
- ORA-00600: internal error code, arguments: [SKGMFAIL]问题解决
- 错误: Error Domain=kCLErrorDomain,The operation couldn’t be completed
- AI - Ideas