Binder框架认知

Service学习笔记-as下配置aidl一文中提到利用aidl技术进行Client和Server的跨进程通信。aidl底层实现就是Binder,Binder作为android推荐的ipc(Inter-Process Communication,进程间通信)方式,自有其独特优势。

ipc主要性能指标不外乎效率与安全性,一般的进程间传递数据一般要通过“用户内存>内核内存>用户内存”这样的两次拷贝,共享内存的话安全性不高,Binder通过mmap()映射的方式,拷贝到内核内存也相当于拷贝到了接收方内存,这样就只需一次拷贝。

fd = open("/dev/binder", O_RDWR);
mmap(NULL, MAP_SIZE, PROT_READ, MAP_PRIVATE, fd, 0);

Binder主要涉及到四大模块-Client、Server、Servicemanager、Binder。其中前三运行在用户态,Binder运行在内核态。

Binder框架认知_第1张图片

Servicemanager的作用类似于DNS(域名解析系统)的功能,Server端注册自己到Servicemanager后,Client请求某个Server时就先去看下Servicemanager注册表中是否有这个服务代理,如果有则返回给Client。Binder的作用类似于路由器,主要用于传输数据。

学习参考:

Android深入浅出之Binder机制

Android Binder设计与实现 – 设计篇

Android进程间通信(IPC)机制Binder简要介绍和学习计划

你可能感兴趣的:(android笔记)