东莞英文网站制作,wordpress可视化编辑,坪山附近公司做网站建设哪家技术好,兰州市建设厅官方网站笔者希望做一个系列#xff0c;整理 Android 基础技术#xff0c;本章是关于Binder 机制 什么是Binder 机制#xff1a;Binder 是一种进程间通信机制 驱动#xff1a;Binder 是一个虚拟物理设备驱动 应用层#xff1a;Binder 是一个能发起通信的 Java 类 为什么要使用Bind…笔者希望做一个系列整理 Android 基础技术本章是关于Binder 机制 什么是Binder 机制Binder 是一种进程间通信机制 驱动Binder 是一个虚拟物理设备驱动 应用层Binder 是一个能发起通信的 Java 类 为什么要使用Binder 图解析 性能上 binder小于共享内存 优于其他ipc 共享内存的缺点 有 死锁和数据不同步线程需要做同步处理的风险 身份识别依赖上层协议知道PID(身份ID)可以调用服务, 可以伪造PID由调用方来告知可以伪造。 binder uid 是唯一的系统分配UID, 比较安全。linux里的id 组id 用户id。 实名和匿名系统服务是实名的个人的注册服务(自己创建的Service其他app也是拿不到一般是匿名 去servicemanager注册的是实名的。 Binder如何实现一次拷贝 回答通过MMAP Binder里 MMAP 的原理是啥 回答mmap原理 让一块虚拟的内存指向一块已知的物理内存如文件 返回一个文件句柄。然后我们直接操作这个文件句柄 就可以实现数据的一次拷贝。 mmap能够让虚拟内存和指定的物理内存直接联系起来。(记住这句话 Binder 传输数据有没限制 如果传递的就是1M-8k 是否可以 不行因为还会包装像网络协议一样 同步是1M-8k 异步是512K-4k aidl是如何生成java类的细节 aidl帮你生成java文件你只需要写服务接口aidl 文件即可xxx.aidl 会生成 xxx.java 类 继承 android.os.IInterface 有静态内部类 Stub 以及 Proxy。Stub 继承 android.os.Binder 类 并且实现 xxx.java 接口Proxy 实现 xxx.java 接口 。Stub 有一个 asInterface 接口作用是区分是否同一个进程如果是本地进程返回的是接口xxx如果是跨进程返回的是 ProxyStub 的 asBinder 接口返回的是this 本身。Stub 是服务端对象Proxy 类内部持有一个成员变量mRemoteandorid.os.IBinder 对象有一个方法叫asBinder返回的是 mRemote。Proxy 类会实现 xxx.java 里面的接口。实现接口的时候实际上是调用mRemote.transact(Parcel data, Parcel replay)调用transact 方法时候客户端线程会被挂起。Proxy 是客户端对象mRemote.trancact 调用后会进入到 Stub的onTransact 接口根据不同的接口调用真正的服务接口如果有数据返回则通过 reply 写入内容。服务连接后客户端拿到的就是 Proxy 对象