1. Boot ROM:
上电后,BootRom会被激活,引导芯片代码开始从预定义的地方(固化在ROM)开始执行,然后加载引导程序到RAM。
2. Boot Loader引导程序
Boot Loader是启动Android系统之前的引导程序,引导程序是OEM厂商或者运营商加锁和限制的地方,它是针对特定的主板与芯片的。OEM厂商要么使用很受欢迎的引导程序比如redboot、uboot、ARMboot等或者开发自己的引导程序,它不是Android操作系统的一部分。
Boot Loader主要作用是检查RAM,初始化硬件参数等功能。
Kernel的启动流程:
alps/kernel/init/main.c
start_kernel() ==> rest_init() ==> kernel_thread(kernel_init) ==> kernel_init()
0号进程:
swapper进程(pid=0):又称为idle进程, 叫空闲进程,由系统自动创建, 运行在内核态。
系统初始化过程Kernel由无到有开创的第一个进程, 也是唯一一个没有通过fork或者kernel_thread产生的进程。
swapper进程用于初始化进程管理、内存管理,加载Display,Camera Driver,Binder Driver等相关工作。
1号进程
init进程(pid=1):由0号进程通过kernel_thread创建,在内核空间完成初始化后, 加载init程序, 并最终运行在用户空间,init进程是所有用户进程的鼻祖。
2号进程
kthreadd进程(pid=2):由0号进程通过kernel_thread创建,是Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。
kthreadd运行在内核空间, 负责所有内核线程的调度和管理 , kthreadd进程是所有内核进程的鼻祖。
Native层主要是init一号进程,并且由其孵化出来的一系列daemon进程,还有一些列native service。
-
init进程会孵化出ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程;
-
init进程还启动servicemanager、bootanim、mediaserver等重要本地服务
-
init进程孵化出Zygote进程,Zygote进程是Android系统的第一个Java进程,Zygote是所有Java进程的父进程。
-
Zygote是第一个Java进程,并且是所有java进程的父进程,由init进程解析init.rc文件后fork生成。
-
System Server进程,是由Zygote进程fork而来,System Server是Zygote孵化的第一个进程。System Server负责启动和管理整个Java framework,包含ActivityManager,PackageManager,WindowManager等服务。
Zygote进程孵化出的第一个App进程是Launcher,Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。所有的App进程都是由Zygote进程fork生成的。
==============================================================================================================================================================================================
了解了大致的框架体系之后,接下来就是给自己列一个学习计划。博主不定期总结学习内容到博客上面来,与大家一起分享。博客会以Android N源码为主来分析,尽量每个知识点做到多画图,多总结,少贴大段源码,避免犯困。
Android应用的四大组件Activity,Service,Broadcast Receiver, Content Provider。
-
四大组件基础知识
-
Android组件 - Activity
-
Android组件 - Service
-
Android组件 - Broadcast Receiver
-
Android组件 - Content Provider
-
Android消息处理机制 Looper、Handler、Message介绍
-
Binder机制
-
Socket通信
-
Android系统启动总结,包含如何启动
init进程
,如何启动zygote进程
和system_server进程
: -
init进程相关包含init rc语法
-
Zygote进程相关知识
-
system_server进程
-
DVM的启动
-
Android系统服务 - ActivityManagerService
-
AMS启动流程
-
AMS的Activity调度
-
Android系统服务 - PackageManagerService
-
应用程序卸载流程
-
Installd守护进程
-
Android系统服务 - WindowManagerService
-
Surface View原理
-
Android系统服务- SurfaceFlinger推图
-
Input系统
-
InputReader介绍
-
InputDispatcher介绍
-
Android系统服务 - PowerManagerService
-
Android系统服务 - UserManagerService
-
MediaServer
-
AudioFlinger - 处理上层AudioTrack创建的音频
-
MediaPlayerService服务:StageFrightPlayer本地播放、NuPlayer在线播放
-
APK逆向 - smali注入
-
ANR问题原理和分析
-
Crash/Exception问题分析
-
Java Exception
-
Native Exception
-
Kernel Panic
-
LowMemoryKiller
尾声
如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
这里,笔者分享一份从架构哲学的层面来剖析的视频及资料给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。
Android进阶学习资料库
一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!
大厂面试真题
PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《2019-2021字节跳动Android面试历年真题解析》
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
d复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-YU6u5OyW-1715359929723)]
《2019-2021字节跳动Android面试历年真题解析》
[外链图片转存中…(img-0eTgkhMG-1715359929723)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!