美文网首页
Android应用程序启动简述

Android应用程序启动简述

作者: Vitaming | 来源:发表于2020-12-24 18:06 被阅读0次

1.启动电源以及系统启动

按下电源,加载引导程序BootLoader到RAM

2.引导程序BootLoader

BootLoader拉起系统OS

3.Linux内核启动

内核启动,设置缓存等,寻找init.rc文件,并启动init进程

4.init进程(Android第一个进程)

1.创建和挂载启动所需的文件目录

2.初始化和启动属性服务

3.设置子进程信号处理函数,防止子进程出现僵尸进程,资源有限僵尸进程会导致无法创建进程

4.解析init.rc配置文件并启动ServiceManager进程后启动Zygote进程

init.rc配置文件是由Android初始化语言Android Init Language

5.Zygote进程启动流程

创建java虚拟机并注册JNI方法(因为ZygoteInit的main方法是由Java语言编写的,当前的运行逻辑在Native中,就需要用JNI调用Java,使Zygote从Native层到Java层)

通过JNI调用ZygoteInit的main方法后红Native层进入到Java层

创建Socket,等待AMS请求创建新的应用程序进程(不选用Binder的原因,多线程情况不能使用fork会导致死锁)

预加载系统类prelaod()(Dialog Intent等)通过反射

forkSystemServer进程

6.SystemServer

1.创建PathClassLoader

2.启动Binder线程池,为了使SystemServer中的服务可以与其他进程通信

3.通过抛出异常的形式调用SystemServer.main方法(抛出异常的处理会清理所所有的设置过程需要的堆栈帧)

4.SystemServer.main中创建系统的Context、启动一些服务包括AMS、PMS、WMS等

5.调用AMS启动Launcher显示系统桌面

7.应用程序启动流程

Launcher进程向AMS请求创建根Activity(Binder)

AMS会判断根Activity所需的应用程序进程是否存在并启动

如果不存在就会请求Zygote进程创建应用程序进程(Socket)

应用程序进程启动后,AMS会请求创建应用程序并启动跟Activity(Binder)

1.应用程序进程启动流程

AMS请求Zygote创建应用程序进程,调用Activity.main。创建主线程Looper、创建主线程H类继承自Handler,用于处理主线程的消息循环。

2.应用程序启动流程

AMS通过Binder与ApplicationThread通信。ApplicationThread是ActivityThread的内部类。向H类发送类型为LAUNCH_ACTIVITY的消息,会调用performLaunchActivity创建context、Instrumentation.newActivity创建Activity、创建Application(内部调用Application的onCreate)、创建PhoneWindow关联Activity,最后调用Instrumentation.callActivityOnCreate启动Activity

相关文章

网友评论

      本文标题:Android应用程序启动简述

      本文链接:https://www.haomeiwen.com/subject/mramnktx.html