【android Framework 探究】浅谈AIDL和Binder

本文是作者入职Android系统工程师的学习总结,从应用开发者角度出发,探讨AIDL和Binder在Android Framework中的作用。首先介绍了学习历程,然后详细讲解了Binder的基础知识,包括Java层的类和概念,以及通过AIDL创建的Demo来理解Binder的调用过程。最后,概述了Binder在AMS中的调用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开头

准备入职做android系统工程师了,奈何系统方面的知识一直没有去梳理过,还是很感谢东家给我这次机会,对于一个小白来说,首要任务就是对自己目前掌握的知识进行总计,查漏补缺。所以自己列了一个学习计划同时也是总结计划,找到一个适合自己的学习曲线是我的首要任务。

下面是计划,哎…万事开头难,看了知识A发现知识B还不了解,计划也是修修改改

计划

任务 阶段目标
1,进程通讯机制 - binder 和 aidl (binder不能恋战) 这很重要,理解了这个才能看懂系统服务间大量的进程间调用关系
2,Android系统的启动流程 理解init进程,zygote,systemServer的启动流程,承担的角色
3,AMS的启动流程 理解AMS从哪里启动,负责启动和管理哪些服务
4,ActivityTask,ActivityRecord,ActivityStackSupervisor 理解Activity的基本数据结构和管理方式
5,Activity的启动流程 梳理startActivity的调用逻辑
6,SurfaceFling,Choreographer渲染机制 Jank的理解和计算方式
7,WMS窗口管理机制 (后面可能有调整)
未完待续

大佬们的指导思想

在迷茫的时候多看一些过来人的意见
Android Framework 如何学习,如何从应用深入到Framework?

我起跑时跌倒的经历

当然每个人的知识水平不同,我个人偏上层。

我个人的学习经历的:
阶段1:经常深陷细节,强行理解,导致昏昏欲睡。
阶段2:痛定思痛,补充一些基本理论知识,结果深陷内核和驱动代码不能自拔,一直到不自信。
阶段3:跳出来,换换脑子,找一些不错的博客,目的是看他们的学习路线,看哪一个最适合自己,不知道你有这种感觉没有,到KTV哪一首歌起头比较符合你的嗓门和最近的心情,你进入状态就很顺滑。
阶段4:从头再来,先宏观再细节,去看源码的调用链,经常看了忘,忘了再看,后来发现好像是要”背课文“。
阶段5:闲暇中思考,因为在系统设计中,都是先有的问题,再有的代码,有时候会思考这样设计解决的问题是什么?

从Binder开始

binder是我们入门Framework的最重要的基础之一,至少理解了binder在系统服务间的跨进程调用,否则很难看懂。

从应用开发者角度开始认识Binder

先聊聊binder,本文不是讲binder,android中的binder框架说实话,要从内核-》驱动-》native-》JNI -》Framework-》app层,牵扯的知识点从内核调度,虚拟内存,内存映射,数据结构,线程管理和设计模式,覆盖面太大了,要真正吃透binder需要大量的时间投入,甚至可能走很多弯路,我的建议对应用开发者,需要熟练掌握AIDL编写方式,理解Binder作者在android框架进程通讯的设计思想,理解常接触的Stub,Proxy这些角色的概念和Parcel序列化传输。

怎样学习binder?我推荐你先看完这个
Binder学习指南

我想做为应用开发者,大都是直接使用的AIDL框架来接触binder的,因为进程通讯的需求在业务开发过程中实在是太常见了。

一,Java层的几个类和概念

  • android.os.IBinder.java : 代表进程通讯的能力。
  • android.os.IInterface.java :客户端和服务端的接口定义(远程接口有什么样的功能)。
  • android.os.Binder.java :可以进程通讯的对象。

角色概念

我想大家都看过科幻剧,一般都有真人投影会议的桥段。

  • Proxy : 代理。影分身,和真人一模一样,客户端通过代理对象访问服务端,感官上和真人说话一模一样。
  • Stub :存根。一般是服务端来实现,就是真人本尊。

方法

  • transact :传送门,开始传送…
  • onTransact :传送门,到达了…

二,从一个AIDL的demo引入思考

demo结构,一个app模块,一个service模块

app模块

.
├── aidl
│ └── com
│ └── demo
│ └── service
│ └── IAidlInterface.aidl
├── AndroidManifest.xml
├── java
│ └── com
│ └── demo
│ └── helloaidl
│ └── MainActivity.java

service模块

.
├── aidl
│ └── com
│ └── demo
│ └── service
│ └── IAidlInterface.aidl
├── AndroidManifest.xml
├── java
│ └── com
│ └── demo
│ └── service
│ └── RemoteService.java

AIDL内容:我利用模板生成,为了好区分,我把方法名修改为add。

// IMyAidlInterface.aidl
package com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值