IPC机制(AIDL)
2017-12-21 14:44
155 查看
2.1 AIDL
可以说是看的我云里雾里,在了解AIDL之前先了解一下Binder。当然也只是了解Binder的使用和上层原理。 Binder是Android中的一个类,实现了IBinder接口。从IPC角度来说,Binder是Android中的一种跨进程间通信方式;从Android FrameWork角度来说,Binder是ServiceManager链接各种Manager和ManagerService的桥梁;从Android应用层角度来说,Binder是客户端和服务端进行通信的媒介。 Android开发中,Binder重要用在Service中,包括AIDL和Messager。这里用AIDL分析Binder的工作机制。新建Java包aidl,然后创建3个文件Book.java、Book.aidl、IBookManager.aidl。其中Book.java是一个表示图书信息的类,它实现了Parcelable接口。Book.aidl是Book类在AIDL中的申明。IBookManager.aidl是定义的一个接口。尽管Book类已经和IBookManager位于相同的包中,但是在IBookManager中仍要导入Book类。系统会自动生成一个IBookManager.java类,此类继承IInterface接口,同时它自己也是一个接口。它声明了一个内部类Stub,这个Stub是一个Binder类,当客户端和服务端都位于同一个进程时,方法调用不会走跨进程的transact过程,而当两者位于不同进程时,方法需走transact过程,这个逻辑是由Stub的内部代理类Proxy来完成。 当客户端发起远程请求时,由于当前线程会被挂起直至服务端进程返回数据,所以如果是耗时操作,那么不能再UI线程中发起此远程请求;由于服务端的Binder方法运行在Binder线程池中,所以Binder方法不管是否耗时都应该采用同步方式去实现。 Binder中还有两个重要方法linkToDeath和unlinkToDeath。这两个方法用在服务端进程的异常终止。 使用AIDL进行进程间通信: 1.服务端 服务端首先创建一个Service用来监听客户端的连接请求,然后创建一个AIDL文件,将暴露给客户端的接口在这个AIDL中申明,最后在Service中实现这个AIDL接口。 2.客户端 绑定服务端的Service,绑定成功后,将服务端返回的Binder对象转换成AIDL接口所属的类型,接着就可以调用AIDL中的方法。 3.AIDL接口的创建 AIDL文件支持的数据类型 ·基本数据类型; ·String和CharSequence; ·List:只支持ArrayList,里面每个元素都必须能够被AIDL支持; ·Map:只支持HashMap,里面每个元素都必须能够被AIDL支持,包括key和value; ·Parcelable:所有实现了Parcelable的对象; ·AIDL:所有AIDL接口本身; 4.远程服务端Service实现 5.客户端的实现 使用AIDL中可以使用Binder连接池来实现多个服务同时运行的问题。
相关文章推荐
- 【Android机制】IPC机制之AIDL
- IPC机制之AIDL、Messenger
- Android进程间通信(IPC)的AIDL机制:Hello World示例
- IPC机制的AIDL进阶,结合观察者模式
- Android的IPC机制(一)——AIDL的使用
- Android中IPC(进程间通信)机制之AIDL
- Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用
- IPC机制第二篇,AIDL实现
- Android的IPC机制(一)——AIDL的使用
- 安卓IPC机制:Binder和AIDL
- Android中进程间通讯(IPC)方式之一AIDL机制
- Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用
- IPC机制之AIDL传递基础类型数据
- Android的IPC机制(二)——AIDL实现原理简析
- AIDL/IPC Android AIDL/IPC 进程通信机制——超详细讲解及用法案例剖析(播放器)
- Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用
- AIDL/IPC Android AIDL/IPC 进程通信机制——超具体解说及使用方法案例剖析(播放器)
- Android的IPC机制(二)——AIDL实现原理简析
- IPC机制分析和AIDL的使用
- Android进程间通信(IPC)的AIDL机制:Hello World示例