1.Binder是什么?
对于android而言,是跨进程传输的通道,是封装好的java类,可以直接继承和使用。
从组成、模型来讲,我认为是连接Server层、Client层、ServerManager层的纽带,也是驱动。
2.Binder的基础概念
2.1 进程空间
进程空间:用户空间(不可共享)和内核空间(可共享)。
linux本身用copy_from_user()与copy_to_user(),用俩次拷贝进行跨进程通讯。
copy_from_user():将A进程的用户空间的数据拷贝到内核空间。
copy_to_user():将内核空间的数据拷贝到B进程的用户空间。
以上需要拷贝2次,而Binder只需要拷贝1次。
2.2 Binder跨进程
2.2.1 流程
service端在binder注册服务到serverManager,client端通过binder获取serverManager里的服务。
2.2.2 作用
Binder.c :连接进程,调用mmap()方法,创建内核缓存区和接受数据缓存区。
ServiceManager.c:通过binder_loop()创建循环请求队列,获取数据和解析binder,关机才会退出循环。
3.Android端与Binder
1.ContentProvider,内部有个ContentProviderNavite与Binder通信
2.Aidl