前言 (个人观点.不喜勿喷)
本部分内容是关于Android进阶的一些知识总结,涉及到的知识点比较杂,不过都 是面试中几乎常问的知识点,也是加分的点。 关于这部分内容,可能需要有一些具体的项目实践。在面试的过程中,结合具体自 身实践经历,才能更加深入透彻的描绘出来。
(年前有很多加我,今天才一一回复,发现很多都失效了,需要的可以重新加一次)
(顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找)
https://github.com/xiangjiana/Android-MS
更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取
一、流程概述
启动流程:
① 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起
startActivity
请求;
② system_server进程接收到请求后,向zygote进程发送创建进程的请求;
③ Zygote进程fork出新的子进程,即App进程;
④ App进程,通过Binder IPC向sytem_server进程发起attachApplication
请求;
⑤ system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向 App进程发送scheduleLaunchActivity
请求;
⑥ App进程的binder线程(ApplicationThread
)在收到请求后,通过handler向主线 程发送LAUNCH_ACTIVITY消息;
⑦ 主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()
等方法。
⑧ 到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume
方法,UI渲染结束后便可以看到App的主界面。
上面的一些列步骤简单介绍了一个APP启动到主页面显示的过程,可能这些流程中 的一些术语看的有些懵,什么是Launcher,什么是zygote,什么是 applicationThread
… 下面我们一一介绍。
二、理论基础
1.zygote
zygote意为“受精卵“。Android是基于Linux系统的,而在Linux中,所有的进程都是 由init进程直接或者是间接fork出来的,zygote进程也不例外。
在Android系统里面,zygote是一个进程的名字。Android是基于Linux System的, 当你的手机开机的时候,Linux的内核加载完成之后就会启动一个叫“init“的进程。在 Linux System里面,所有的进程都是由init进程fork出来的,我们的zygote进程也不 例外
我们都知道,每一个App其实都是
- 一个单独的dalvik虚拟机