前言
Android系统一共分为4层
其中AndroidFramework
是应用程序框架层(framework):
应用程序使用的系统API框架,提供各种组件和服务,包括ActivityManager,WindowManager,ViewSystem等。
Framework
在Android系统中处于一种承上启下的地位。承上的意思是框架为上层应用提供api和运行机制;启下的意思是框架屏蔽了下层的复杂性,为上下层的交互定义了一套规范。
为什么学习Framework
通常作为一个Android APP开发者,我们并不关心Android的源代码实现,不过随着Android开发者越来越多,企业在筛选Android程序员时越来越看中一个程序员对于Android底层的理解和思考,这里的底层主要就是Android Framewok中各个组件的运行原理,例如Binder的运行机制、ServiceManager的作用等等。
这里列一段Binder的相关知识
Binder 通信方式进程A给进程B发送一段信息,流程如下:
1、进程A通过系统调用拷贝内容到内核空间。 2、由于内核空间与进程B做了内存
映射,因此进程B能够知道内核空间的信息。
从上可知,通过Binder,进程A给进程B发送信息只进行了一次数据拷贝。 对比其它IPC方式可知
:
另外,传统的IPC方式只能由使用者填入UID/PID,容易被外界仿造、篡改。而Binder内置为发送
者添加UID/PID,更安全。
Android Binder 使用场合
似乎平时很少使用Binder呢?其实不然,我们不知不觉中已经用了它。 上图展示了Binder使用
C/S模式,也就是S(Server)端提供服务入口,C(Client)调用服务提供的接口,进而两者可以进
行通信。 先来看看一段手机马达震动的代码:
Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(1000);
调用了Context里的方法:getSystemService,指定获取名为:VIBRATOR_SERVICE 的服务,拿到服务后调用 vibrate(xx)即可实现手机震动。 每个App都能通过访问这段代码来实现手机震动,
可想而知拿到的"震动服务"一定是某个地方统一提供的。 我们知道,Android系统启动后会开启名为:system_server的进程,顾名思义:系统服务,提供给所有App使用的公共服务进程。 “震动服务"就是跑在该进程里的。 当调用getSystemService(xx)获取"震动服务时”,相当于调用者
(App进程)与system_server(服务提供进程)进行了一次IPC过程(实际比较复杂,简单说是:
通过ServiceManager获取Binder,该Binder连接system_server,ServiceManager跑在另外的进程
如果你最近在找工作或者有关注Android行业的招聘这一块就会发现,现在很多公司,特别是大厂在招聘高工或者架构师的时候都会将熟悉framework原理或源码列为招聘要求之一。
像涉及到车载之类的也需要会Framework。所以Framework因为它涉及的广,理所当然就业面也广。
如何学习?
如果你是因为缺少学习资料,而我正好薅到这本阿里十年技术专家联合打造的Android Framework学习指南。
由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要《Android Framework进阶学习指南》完整文档的可扫描下方卡片免费获取~
《Android Framework 开发揭秘》
目录
第一章 系统启动流程分析
● 第一节 Android启动概览
● 第二节 init.rc解析
● 第三节 Zygote
● 面试题
第二章 Binder解析
● 第一节 宏观认识Binder
● 第二节 binder的jni方法注册
● 第三节 binder驱动
● 第四节 数据结构
● 第五节 启动service_manager
● 第六节 获取service_manager
● 第七节 addService流程
● 第八节 Binder面试题全解析
第三章 Handler解析
● 第一节 源码分析
● 第二节 难点问题
● 第三节 Handler常见面试题
第四章 AMS解析
● 第一节 引言
● 第二节 Android架构
● 第三节 通信方式
● 第四节 系统启动系列
● 第五节 AMS
● 第六节 AMS面试题解析
第五章 WMS解析
● 第一节Activity与Window相关概念
● 第二节 Android窗口管理服务WindowManagerService计算Activity窗口大
● 第三节Android窗口管理服务WindowManagerService对窗口的组织方式分析
● 第四节 Android窗口管理服务WindowManagerService对输入法窗口(Input
● 第五节 Android窗口管理服务WindowManagerService对壁纸窗口(Wallpap
● 第六节Android窗口管理服务WindowManagerService计算窗口Z轴位置的过程分析
● 第七节Android窗口管理服务WindowManagerService显示Activity组件的启
● 第八节Android窗口管理服务WindowManagerService切换Activity窗口(A
● 第九节 Android窗口管理服务WindowManagerService显示窗口动画的原理分析