AIDL实例浅析
2016-04-07 01:53
302 查看
此为笔者在阅读过《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对象,上图说话
本篇旨在通过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对象,上图说话
相关文章推荐
- Airtable(数据管理)
- could not bind to address 0.0.0.0:443 no listening sockets available, shutting d
- Mesos 维护原语 (Maintenance Primitives)
- LeetCode *** 70. Climbing Stairs
- 【一天一道LeetCode】#11Container With Most Water
- 【一天一道LeetCode】#11Container With Most Water
- 训练集(train set) 验证集(validation set) 测试集(test set)
- Count ways to reach the n’th stair
- Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connect
- leetcode——70——Climbing Stairs
- 最简实例说明WAIT、NOTIFY、NOTIFYALL的使用方法
- HDOJ 1789-Doing Homework again【贪心】
- RAII&智能指针
- POJ-1273-Drainage Ditches(最大流)dinic实现 后续模板待补充
- Mastering Bitcoin(掌握比特币)读书笔记
- RabbitMQ消息队列(一): Detailed Introduction 详细介绍
- vitualbox + debain 配置NAT+HOSTONY的固定IP
- LeetCode 11 Container With Most Water
- Factorial Trailing Zeroes 带测试版
- LeetCode *** 217. Contains Duplicate