[Hbase]
Android庞大的源码体系是怎么设计的?2020字节跳动Framework-高频面试题详细总结
数据库
发布于:2021-12-27 23:01
|
阅读数:293
|
评论:0
|
1.什么是 Zygote 进程
Zygote 进程是所有的 android 进程的父进程,包括 SystemServer 和各种应用进程都 是通过 Zygote 进程 fork 出来的。Zygote(孵化)进程相当于是 android 系统的根进程, 后面所有的进程都是通过这个进程 fork 出来的。
虽然 Zygote 进程相当于 Android 系统的根进程,但是事实上它也是由 Linux 系统的 init 进程启动的。
2.Zygote 进程的启动流程
- 源码位置
- ZygoteInit 类的 main 方法
- registerZygoteSocket(socketName)分析
- preLoad()方法分析
- startSystemServer()启动进程
3.SystemServer 进程启动流程
SystemServer 进 程 主 要 的 作 用 是 在 这 个 进 程 中 启 动 各 种 系 统 服 务 , 比 如 ActivityManagerService,PackageManagerService,WindowManagerService 服务,以 及各种系统性的服务其实都是在 SystemServer 进程中启动的,而当我们的应用需要使 用各种系统服务的时候其实也是通过与 SystemServer 进程通讯获取各种服务对象的句 柄的。
- SystemServer 的 main 方法
- 查看 run 方法
- run 方法中 createSystemContext()解析
- mSystemServiceManager 的创建
4.启动服务
- 启动哪些服务:在开始执行启动服务之前总是会先尝试通过 socket 方式连接 Zygote 进程,在成功 连接之后才会开始启动其他服务。
- 启动服务流程源码分析
- 启动部分服务
三、Binder 机制(IPC、AIDL 的使用)
1、什么是 AIDL 以及如何使用(★★★★)
①aidl 是 Android interface definition Language 的英文缩写,意思 Android 接口定义语言。
②使用 aidl 可以帮助我们发布以及调用远程服务,实现跨进程通信。
③将服务的 aidl 放到对应的 src 目录,工程的 gen 目录会生成相应的接口类
......
2、AIDL 的全称是什么?如何工作?能处理哪些类型的数 据?(★★★)
AIDL 全称 Android Interface Definition Language(AndRoid 接口描述语 言) 是一种接口描述语言; 编译器可以通过 aidl 文件生成一段代码,通过预先 定义的接口达到两个进程内部通信进程跨界对象访问的目的。需要完成2件事情: 1. 引入 AIDL 的相关类.; 2. 调用 aidl 产生的 class.理论上, 参数可以传递基本数 据类型和 String, 还有就是 Bundle 的派生类, 不过在 Eclipse 中,目前的 ADT 不 支持 Bundle 做为参数。
3.android 的 IPC 通信方式,线程(进程间)通信机制有哪些?
1)ipc 通信方式:binder、contentprovider、socket
2)操作系统进程通讯方式:共享内存、socket、管道
4.为什么使用 Parcelable,好处是什 么?
简单来说,Parcelable 是一个 interface,有一个方法 writeToParcel(Parcel dest, int flags),该方法接收两个参数,其中第一个参数类型是 Parcel。看起来 Parcelable 好像是 对 Parcelable 的一种包装,从实际开发中,会在方法 writeToParcel 中调用 Parcel 的某 些方法,完成将对象写入 Parcelable 的过程。
........
5. Android 图像显示相关流程,Vsync 信号等
1)没有使用 Vsync 的情况
2)有 Vsync 的情况
3)双重缓冲
4)三重缓冲
BATJ 大牛笔记Android Framework 内核解析
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
目录
章节部分内容展示:
那位BATJ 的大佬是这个方面的专家,他整理出来的这份资料一共有452页,都是他根据自己的工作实战经验,把Android Framework 内核解析精编出来的劳动成果,那份资料火爆全网,但是现在开放下载了!
文章内容比较长,一篇文章写不完,为了不影响大家的阅读体验,下面只以截图的方式进行部分内容的展示。
大家可以看一下有没有自己需要或者感兴趣的点,方便对自己的知识体系进行查漏补缺。
第一节 Binder 系列—开篇
一、概述
二、 Binder
三、 提纲
四. 源码目录
第二节 Binder Driver 初探
一、Binder 驱动概述
二、 Binder 核心方法
三、附录
第三节 Binder Driver 再探
一、Binder 通信简述
二、Binder 通信协议
三. 场景总结
四、Binder 内存机制
第四节 Binder 启动 ServiceManager
一. 概述
二. 启动过程
三. 核心工作
四. 总结
第五节获取 ServiceManager
一. 概述
二. 获取 ProcessState 对象
三. 获取 BpBinder 对象
四. 获取 BpServiceManager
五. 总结
总结
写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于Flutter的学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。
由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的?点击我的GitHub免费获取。
还有免费的高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。
|
免责声明:
1. 本站所有资源来自网络搜集或用户上传,仅作为参考不担保其准确性!
2. 本站内容仅供学习和交流使用,版权归原作者所有!© 查看更多
3. 如有内容侵害到您,请联系我们尽快删除,邮箱:kf@codeae.com
|
|
|
|
|