Binder和AIDL

学习笔记,仅供自己参考,如有不对欢迎指正

1.binder机制

binder.png

1.用户空间和内核空间:在linux中,进程空间分为用户空间内核空间用户空间不可以进行数据交互;内核空间可以进行数据交互,所有进程共用一个内核空间。
2.Binder进程间通信机制相遇与linux传统方式好处:
(1)性能更好;Binder机制只需要拷贝数据一次,管道、消息队列、Socket等都需要拷贝数据两次;而共享内存虽然不需要拷贝,但实现复杂度高。
(2)安全性更高;采用唯一的uid,当安装一个应用app时;系统会为其分配一个uid;一块内存空间;因此进程uid是鉴定进程身份重要标志。
3.Binder跨进程通信机制组成元素:基于C/S架构,由Client、Server、Server Manager和Binder驱动组成。
4.Binder驱动实现的原理:通过内存映射,即系统调用了mmap()函数,核心类是MappedByteBuffer

mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。

5.Server Manager的作用:管理Service的注册和查询。
6.Binder驱动的作用:
(1)传递进程间的数据,通过系统调用mmap()函数;
(2)实现线程的控制,通过Binder驱动的线程池,并由Binder驱动自身进行管理。
7.Binder驱动的线程池:Server进程会创建很多线程处理Binder请求,这些线程采用Binder驱动的线程池,由Binder驱动自身进行管理。一个进程的Binder线程池默认最大是15个,超过的请求会阻塞等待空闲的线程。
8.Binder机制中的四个组件Client、Server、Service Manager和Binder驱动 的关系:
(1)Client、Server、Service Manager三者存在用户空间中和Binder驱动在内核空间中
(2)Service Manager和Binder驱动android底层已经实现,我们只需要在用户空间实现Client、Server
(3)Client和Server之间的通欣,是通过Binder驱动间接实现的
9.Android Input子系统为什么使用Socket,而不是Binder
(1)Input系统事件分发是双向通信。Binder不适合做双向通信
(2)Input系统中的事件本身数据量比较小,Binder只需要Copy一次数据的优势变得不明显
(3)Binder是CS架构,用于系统service之间或者APP作为service作为Client调用Sevice(如AMS)。整体类似http,Input系统的通信机制与之不同,需要双向通信,由Service通知Client

2.关于AIDL

(1)AIDL支持的数据类型

  • 基本数据类型(int、long、char、boolean、double等);
  • String和CharSequence;
  • List:只支持ArrayList,而且里面的每个元素也必须是AIDL所支持的类型;
  • Map:只支持HashMap,而且里面的每个key和value都必须是AIDL所支持的类型;
  • Parcelable:所有实现了Parcelable接口的对象;
  • AIDL:所有的AIDL接口自身也可以在AIDL中使用;
    (2)AIDL具体使用:
    步骤1:Book.java类,需要实现Parcelable接口(为了被AIDL所支持)
    image.png

    步骤2:Book.aidl文件,需要声明一下:
    image.png

    步骤3:IBookManager.aidl文件:
    image.png

    步骤4:编译服务端代码会生成一个IBookManager.java
    image.png

    步骤5:编写远程服务代码RemoteService:
    image.png

    步骤6:客户端是实现就是将服务端的整个目录全部复制到本地,包名不能变。
    步骤7:在Client的MainActivity中绑定远程服务,并调用远程服务中的方法实现功能:
    图片7.png

    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容