每天一个面试知识点,日后拿下大厂面试官!
App启动流程三问
App的启动流程和Activity的启动流程也是面试中常常被问到的知识点,但是往往会涉及到很多方面,让我们不知道从何做答,今天就一起来看看启动流程相关问题:
- 说一下APP的启动流程
- 里面涉及到哪些重要的成员呢?都分别负责了什么,比如AMS?
- 启动流程了解后,对我们开发有什么帮助呢?
说一下APP的启动流程
Launcher
被调用点击事件,转到Instrumentation类的startActivity方法。Instrumentation
通过跨进程通信告诉AMS要启动应用的需求。AMS
反馈Launcher,让Launcher进入Paused状态Launcher
进入Paused状态,AMS转到ZygoteProcess类,并通过socket与Zygote通信,告知Zygote需要新建进程。Zygote
fork进程,并调用ActivityThread的main方法,也就是app的入口。ActivityThread
的main方法新建了ActivityThread实例,并新建了Looper实例,开始loop循环。- 同时
ActivityThread
也告知AMS,进程创建完毕,开始创建Application,Provider,并调用Applicaiton的attach,onCreate方法。 - 最后就是创建上下文,通过类加载器加载Activity,调用Activity的
onCreate
方法。
里面涉及到哪些重要的成员呢?都分别负责了什么,比如AMS?
init进程
,Android系统启动后,Zygote并不是第一个进程,而是linux的根进程init进程,然后init进程才会启动Zygote进程。Zygote进程
,所有android进程的父进程,当然也包括SystemServer进程SystemServer进程
,正如名字一样,系统服务进程,负责系统中大大小小的事物,为此也是启动了三员大将(ActivityManagerService,PackageManagerService,WindowManagerService)以及binder线程池。ActivityManagerService
,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,对于一些进程的启动,都会通过Binder通信机制传递给AMS,再处理给Zygote。PackageManagerService
,主要负责应用包的一些操作,比如安装,卸载,解析AndroidManifest.xml,扫描文件信息等等。WindowManagerService
,主要负责窗口相关的一些服务,比如窗口的启动,添加,删除等。Launcher
,桌面应用,也是属于应用,也有自己