写点什么

Android 庞大的源码体系是怎么设计的?2020 字节跳动 Framework 高频面试题详细总结

用户头像
Android架构
关注
发布于: 4 小时前

开始阶段、扫描系统阶段、扫描 Data 分区阶段、扫描结束阶段、准备阶段、

二、Activity 启动流程,App 启动流程

Activity 的启动模式


1.standard:默认标准模式,每启动一个都会创建一个实例,


2.singleTop:栈顶复用,如果在栈顶就调用 onNewIntent 复用,从 onResume()开始


3.singleTask:栈内复用,本栈内只要用该类型 Activity 就会将其顶部的 activity 出栈


4.singleInstance:单例模式,除了 3 中特性,系统会单独给该 Activity 创建一个栈


1.什么是 Zygote 进程


Zygote 进程是所有的 android 进程的父进程,包括 SystemServer 和各种应用进程都 是通过 Zygote 进程 fork 出来的。Zygote(孵化)进程相当于是 android 系统的根进程, 后面所有的进程都是通过这个进程 fork 出来的。


虽然 Zygote 进程相当于 Android 系统的根进程,但是事实上它也是由 Linux 系统的 init 进程启动的。


2.Zygote 进程的启动流程


  • 源码位置

  • ZygoteInit 类的 main 方法

  • registerZygoteSocket(soc


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


ketName)分析


  • 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 核心方法


三、附录

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android庞大的源码体系是怎么设计的?2020字节跳动Framework 高频面试题详细总结