前言
IPC 是 Inter-Process Communication 的缩写,含义为进程间通信。
Binder是一个很深入的话题,本篇文章不打算深入探讨Binder的底层细节,重点介绍Binder的使用以及上层原理。
Binder 是Android中的一个类,他实现了IBinder接口。Binder是Android中的一种跨进程通信方式,Binder还可以理解为一种虚拟的物理设备,他的设驱动是/dev/binder。从Framework层来说,Binder是ServiceManager连接各种Manager和相应ManagerService的桥梁。从Android应用层来说,Binder是客户端和服务端进行通信的媒介,通过binderService去绑定远程服务,进行通信。
AIDL中支持的数据类型
- 基本数据类型(int、long、char、boolean、double等)
- String 和CharSequence
- List:只支持ArrayList,里面每个元素都必须能够被AIDL支持
- Map:只支持HashMap,里面的每个元素都必须被AIDL支持,包括key。
- Parcelable:所有实现了Parcelable接口的对象。
- AIDL:所有的AIDL接口本身也可以在AIDL中使用。
AIDL生成结构图![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2328e00895d782431651984d80c5384a.jpeg)
下面我们实现一个简单的AIDL并分析一下他的通信过程
Intent intent = new Intent(this, MyService.class);
bindService(intent,connection,BIND_AUTO_CREATE);
当我们调用bindService方法后。系统就会为我们把对应的远程服务端唤醒,看源码知道是通过ServiceManager 去远程服务用ClassLoader反射的方式启动需要启动的service。细节部分大家自己看frameWork层源码吧,东西太多了,这里只分析AIDL应用层流程。
Service启动之后就开始去创建BookBind类