首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

Android源码分析--应用程序启动

2024-12-14 来源:华拓网

应用程序的启动,又可称为根Activity的启动。但是在讲应用程序启动之前,我们有必要对应用程序进程(AppProcess)启动有所了解,那是因为启动一个应用程序首先要保证该应用程序的进程已经被启动。AMS在启动应用程序时,会先检查应用程序进程是否存在,如果不存在就需要请求Zygote进程创建并启动应用程序进程。这里我不会贴上大段大段的代码,只是一些总结,并提供了相关源码的链接。

应用程序进程(AppProcess)启动

启动大纲

  1. AMS发送启动应用程序进程请求.
  2. Zygote接收请求并创建应用程序进程.

AMS发送启动应用程序进程请求

在这里插入图片描述

AMS发送启动应用程序进程请求

在这里插入图片描述

应用程序(App)启动

讲完了应用程序进程(AppProcess)启动的相关内容后,接下来我们就来看看应用程序是如何一步一步启动的。

启动大纲

  1. Launcher请求AMS。

  2. AMS请求ApplicationThread。

  3. ActivityThread启动Activity。

启动时序图

在这里插入图片描述

Launcher请求AMS

在这里插入图片描述

AMS请求ApplicationThread

在这里插入图片描述
  • 在AMS的startActivity方法中,又调用了其本身的startActivityAsUser方法,进行权限的检查。

ActivityThread启动Activity

在这里插入图片描述
  • 在ActivityThread调用了它的handleLaunchActivity方法中,会先调用其performLaunchActivity方法,之后调用handleResumeActivity,将Activity的状态置为Resume。

  1. 首先,执行了createBaseContextForActivity方法,创建要启动Activity的上下文;
  2. 其次,调用执行了Instrumentation的newActivity方法来创建Activity实例;
  3. 接着,调用的makeApplication方法,创建应用程序的Application;
  4. 之后,调用需要启动的Activity的attach方法初始化Activity,创建Window对象并与Activity自身进行关联。
  5. 最后,调用执行了的callActivityOnCreate方法来启动Activity。
  • 在Instrumentation执行了callActivityOnCreate方法中,会调用的performCreate方法,最终会调用Activity的onCreate方法,这样应用程序也就启动了。

应用程序启动的进程关系图

应用程序启动的过程中,主要涉及了Launcher进程、SystemServer进程、Zygote进程和应用程序进程这四个进程,它们之间的关系如下。


在这里插入图片描述

联系方式

在这里插入图片描述

微信公共号

在这里插入图片描述
显示全文