AIDL实例浅析

来源:互联网 发布:网络推广兼职是真是假 编辑:程序博客网 时间:2024/05/16 05:25

此为笔者在阅读过《Androd开发艺术探索》后的一些体会,demo采用书中源码,做一个简单分析

本篇旨在通过AIDL的demo里了解IPC和Binder,那么谈到AIDL就不得不提一下IPC和Binder。

首先IPC的含义是进程间通信亦称跨进程通信,指两个进程之间的数据交换工程。(不做过多介绍,有兴趣的朋友可以上网找更详细的答案)

Binder则是一个更加深入的话题,此同样不做过多介绍,可参考老罗的Android之旅对于Binder的介绍:

⑴从IPC角度来说,它是Android中一种跨进程通信的方式

⑵在应用层方面,Binder是客户端和服务端进行通信的媒介

当绑定了服务端的服务以后,服务端会返回一个Binder对象,通过这个Binder对象,我们可以获取服务端的数据以及服务,下面以AIDL为例(图片示例)


声明Book类并序列化(IPC中传输自定义的对象时,那么需要序列化)


在AIDL文件中声明Book类已经被序列化


现在给服务端赋予4个方法:⑴可从服务端获取图书列表⑵可增加图书列表到服务端⑶在服务端注册监听,当有新书的时候,通知客户端⑷解除注册


对监听接口的声明(注意in表示输入型参数)

写完以上AIDL接口以后,系统会自动在gen目录生成Ixxx.java文件,可以来看一下文件的结构,以IBookManager.java为例

注意看代码片里的方法注释就好,具体分析因篇幅限制不做过多介绍
接下来创建服务端的服务
服务端创建好以后,来搞定客户端,注意最好将与AIDL文件有关的类放在同一个包下,这样在客户端需要获取服务端服务时,可以直接拷贝,如下图



接下来开始搞定客户端....

哈~这样,客户端和服务端就搭建完毕...来看看运行效果


如图所示,客户端收到了来自服务端不断创建的新书的信息...既然服务端推送的功能已经实现,自然获取所有图书和添加新书功能也不在话下,此处就不再复述,各位朋友可以自行测试~

下面附上原理图


上面是AIDL单一接口的实现,如果是服务端有多个AIDL接口呢?也简单,只要加上BinderPool即可,创建不同的Binder对象,上图说话


0 0
原创粉丝点击