Android Framework 如何学习,如何从应用深入到Framework?

news2025/1/15 12:52:07

1、为什么要学Android Framework呢?

一方面,面试考察相关内容的可能性高。随着Android开发者越来越多,企业对Android程序员的筛选也有了更高的要求, 考察对Android底层逻辑的理解和思考就是很重要的一个方面,尤其是Android Framewok中各个组件的原理。Framewok相关的知识是一个深层次的内容,有些面试官喜欢一直问到你答不上来为止,正儿八经的考察你的技术能力,这也要求Android开发工程师对相关知识有一个较为全面的认识。

另一方面,学习Android Framewok本身就是有价值的。很多公司的应用开发需要基于模块化、层次化、组件化、控件化来设计架构,它的基础就是建立在Android Framework框架的底层原理之上,学习Framewok可以深层次的去解决安卓应用开始时遇到的一些难题,甚至不少公司都有设置专门的Android Framewok开发岗位。大家都知道目前一般的Android开发者已经趋于饱和,发展的方向无非就是进阶成为中高级Android开发,或者深入Android底层逻辑转向系统开发,大家可以选择一条路径去拓宽自己的深度和广度。

例如:某场哔哩哔哩的Android开发工程师岗位面试上来就是:
1、安卓的系统架构了解吗
2、有做过framework层的开发吗
……

如果是你,你会怎么回答?

2、具体要怎么去学呢?

我们都知道,Android系统架构可以分为五个层面,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。每个层面又涉及了很多的细分要点,在进行学习时,一定要先理解整体的流程,然后再去细啃“硬骨头”。这里推荐大家阅读这两本专业书籍:《深入理解Android》和《Android内核剖析》,读完真的收获满满,同时大家还要学会去看源码,没必要花大量时间去复写代码,不要想着去全盘吸收,学习跟踪方法和把握整体的流程才是重要之处。

3、Android Framework想要精通的话还要学什么?

如果想要精通Framework,不仅要对底层原理有一个比较充分的了解,还要能够利用Framework知识去指导实际的开发工作,包括Handler、Binder、Android系统启动流程以及AMS、PMS等内容最好都要会。

例如:Android 系统启动流程
第一步:手机开机后,引导芯片启动,引导芯片开始从固化在ROM里的预设代码执行,加载引导程序到到RAM,bootloader检查RAM,初始化硬件参数等功能;
第二步:硬件等参数初始化完成后,进入到Kernel层,Kernel层主要加载一些硬件设备驱动,初始化进程管理等操作。在Kernel中首先启动swapper进程(pid=0),用于初始化进程管理、内管管理、加载Driver等操作,再启动kthread进程(pid=2);
第三步:Kernel层加载完毕后,硬件设备驱动与HAL层进行交互。初始化进程管理等操作会启动INIT进程;
第四步:init进程(pid=1)启动后,会启动adbd,logd等用户守护进程,并且会启动servicemanager等重要服务,同时孵化出zygote进程;
第五步:zygote进程加载虚拟机,启动System Server;它负责启动和管理整个Java Framework ;
第六步:zygote同时会启动相关的APP进程,它启动的第一个APP进程为Launcher,然后启动Email,SMS等进程,所有的APP进程都有zygote fork生成。


之前小编为了彻底搞的这块知识点,对Framework 进行了一段时间的深入研究,并根据自己所学所理解整理了一些学习笔记,并更具不同小知识点进行了归类:

这是我学习时的一张思维导图,大家也可以看一下:

该路线共分为5大板块,分别是:Framework 通信、Framework底层服务、Framework 系统资源、Framework事件机制、Framework UI机制,在这些里面又分了许多小分支,大家可以仔细的参考看一下。针对这图中所记录的一些小知识点相关解析汇总成了一个文档形式。

《Framework 核心知识点汇总手册》:https://0a.fit/acnLL

Handler 机制实现原理部分:

1.宏观理论分析与Message源码分析
2.MessageQueue的源码分析
3.Looper的源码分析
4.handler的源码分析
5.总结

Binder 原理:
1.学习Binder前必须要了解的知识点
2.ServiceManager中的Binder机制
3.系统服务的注册过程
4.ServiceManager的启动过程
5.系统服务的获取过程
6.Java Binder的初始化
7.Java Binder中系统服务的注册过程

Zygote :

  1. Android系统的启动过程及Zygote的启动过程
  2. 应用进程的启动过程
    在这里插入图片描述
    AMS源码分析 ::https://0a.fit/acnLL
  3. Activity生命周期管理
  4. onActivityResult执行过程
  5. AMS中Activity栈管理详解

    深入PMS源码:
    1.PMS的启动过程和执行流程
    2.APK的安装和卸载源码分析
    3.PMS中intent-filter的匹配架构

WMS:
1.WMS的诞生
2.WMS的重要成员和Window的添加过程
3.Window的删除过程

《Android Framework学习手册》:https://0a.fit/acnLL

  1. 开机Init 进程
  2. 开机启动 Zygote 进程
  3. 开机启动 SystemServer 进程
  4. Binder 驱动
  5. AMS 的启动过程
  6. PMS 的启动过程
  7. Launcher 的启动过程
  8. Android 四大组件
  9. Android 系统服务 - Input 事件的分发过程
  10. Android 底层渲染 - 屏幕刷新机制源码分析
  11. Android 源码分析实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

遥感测深方法综述(一)遥感测深方兴未艾

众所周知,当前世界上许多沿海近岸区域的海图数据更新滞后,甚至直接空白,大约有50%的沿海国家不具备国家级海图制图能力,特别是发展中国家常缺乏足够的水深数据或海图,总体上的浅海测深和制图能力处于从“贫乏”到“具备…

智慧社区管理系统08(维修和柱状图显现)

目录 后端代码 实体类 mapper层 mappers sql语句 Service层 接口 实现类 Controller层 前端部分 列表显示 后端代码 实体类 package com.woniu.community.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data…

跨境电商:圣诞前的狂欢,超级星期六营销白皮书

“黑五”和“网一”的促销大戏终于告一段落了。Nox聚星获悉,Adobe Analytics的初步统计显示,美国购物者在今年黑色星期五的线上支出达到创纪录的91.2亿美元,增长2.3%。今年的市场表现比预期的要好,对跨境卖家而言,是个…

01-Maven高级

回顾 知识目标 第一单元、父子工程 1、为什么使用父子工程? 1.1、痛点1:提高了代码的重用性 父控制器的存在就是为了去除重复,一个项目存在多个模块,可能由多个人开发,比如abc3个模块,3个模块都是基于…

如何设计分布式系统-分布式事务-XA?

以下为个人观点,如有纰漏敬请指正。 如何设计分布式系统-CAP和BASE理论?_技术分子的博客-CSDN博客​​​​​​ 什么是事务? 处理问题整个过程中同时具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)&am…

Fucoidan-PLGA 岩藻多糖-聚乳酸-羟基乙酸共聚物 PLGA-PEG-Fucoidan

Fucoidan-PLGA 岩藻多糖-聚乳酸-羟基乙酸共聚物 PLGA-PEG-Fucoidan 中文名称:岩藻多糖-聚乳酸-羟基乙酸共聚物 英文名称:Fucoidan-PLGA 别称:PLGA修饰岩藻多糖,PLGA-岩藻多糖 岩藻多糖修饰的壳聚糖聚乳酸-羟基乙酸共聚物[poly…

软件测试面试技巧:如何提高面试通过率?这3点一定要做到

对于想要进入到软件测试岗的新手人员来说,面试这一关是非常重要的,它直接关系着你的去留,也关系后续的期待遇问题,那么,有没有什么技巧可以帮忙提高面试通过率呢? 关于这一问题答案,我从这几个方…

云计算模式的优势

PaaS是一种云计算形式,它提供了一个平台,允许开发人员和程序员开发、运行和管理自己的应用,而无需构建和维护相关的基础架构或平台。它就像是一个地基,由专门的平台服务提供商进行搭建和运营,并将该平台以服务的方式提…

D-022 SD/TF卡硬件电路设计

SD/TF卡硬件电路设计1 简介2 SD卡和Micro接口定义3 硬件设计要点4 硬件电路实战1 简介 SD卡按尺寸可以分为:标准SD卡、MiniSD卡、MicroSD卡。SD存储卡是一种基于半导体快闪记忆器的忆器设备。它具有体积小、传输速度快、支持热插拔等优点,在便携式装置领…

无延时直播/超低延时直播画面同步性测试(实测组图)

阿酷TONY / 原创 2022-11-30 / 长沙 / 超多组图 无延时直播/超低延时直播,主要只测试延时情况,没有涉及直播产品的功能、使用操作界面,有兴趣的朋友可以加联系我实际测试哦~~~ 1.无延时直播应用场景 无延时直播/超低延时常见应用场景&a…

用字典统计序列中键和值的数量collections.Counter()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 用字典统计序列中键和值的数量 collections.Counter() 选择题 以下python代码结果错误的一项是? from collections import Counter myList[a,b,a] print(【显示】myList,myList) myDictCoun…

全波形反演的深度学习方法: 第 3 章 常规反演

本章介绍反演的基础知识, 以及工程中的常规反演. 仅供内部培训. 3.1 地震数据采集 地震勘探中常使用人工激发的振动进行数据采集. 相应装置包括: 激发器是产生震动的装置, 如炸药, 地震车 (撞击地面). 在城市道路等具有车辆会产生振动的地方, 也可以不安装这类装置;地震检波…

定时执行专家 —— 定时循环发送UDP消息(例如:控制远程电脑的开机、关机、重启、打开和关闭程序等)

目录 ◆ 定时执行专家 - 发送UDP消息功能 - 设置方法 - 使用注意事项 ◆ 两种发送方式 ◆UDP消息的两种格式类型 ◆ 关于UDP协议 ◆ 定时执行专家 - 发送UDP消息功能 - 设置方法 (1)点击 “定时执行专家” 工具栏 “新建” 图标,打开…

低温烹饪过程中真空压力的自动控制

摘要:真空低温烹饪法作为已经经典的高品质烹饪方法,并未得到广泛的应用,主要问题是无法针对各种食材进行真空度的准确设定和控制。本文将针对低温烹饪目前存在的真空度控制问题,提出相应的解决方案。解决方案的核心是采用动态平衡…

Microolap DAC for MySQL驱动程序或其他库

Microolap DAC for MySQL驱动程序或其他库 用于MySQL和Delphi/CBuilder(也称为MySQLDAC)的Microolap直接访问组件是一组Borland Delphi/CBuilder组件,允许直接连接到MySQL数据库服务器。DAC for MySQL允许您创建Delphi/CBuilder应用程序,无需BDE、ODBC或…

连表查询数据,将数据分组串联到一起

场景:用户中心,一个用户是对应多个角色的,登录系统之后需要返回用户信息给前端,其中包含多个用户角色 这个时候,group_concat函数就出场了,当然这是针对于MySql去使用; group_concat函数首先根…

PX4代码解析(6)

一、前言 上一节介绍了PX4姿态估计调用函数的流程,这一节分享一下我对PX4姿态解算的解读.首先,要理解PX4姿态解算的程序,要先从传感器的特性入手,这里主要介绍的传感器有加速度计,磁力计,陀螺仪. 二、传感…

GeoServer服务迁移出现 EncryptionOperationNotPossibleException 错误的解决方案

目录1.前言2.GeoServer服务迁移一般流程3.遇到问题4.原因分析5.解决办法6.根本原因分析7.总结1.前言 这几天我在迁移 GeoServer 服务的时候发现,报了一个错,EncryptionOperationNotPossibleException ,这个错误的大概意思是加密操作不可用异常…

Jenkins - 打造强大的前端自动化工作流

什么是 Jenkins? Jenkins 是一款业界流行的开源持续集成工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。我们可以利用 Jenkins 来对项目的持续性集成进行管控处理。 Jenkins 任务的创建 这里就简单不再累赘说明 Jenkins 的安装启动…

CF思维训练,2020长春CCPC(A,D)

D. Knowledge Cards(华容道GAME) 题意:给定n*m的矩阵,初始在左上角有一摞牌,从上到下每张的数字构成了一个长度为k的排列,请问在保证1.不能使得牌在移动过程中重叠2.不能让牌反复出现在左上和右下角。这两个条件下,能…