欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android APP及ActivityThread启动流程是如何的

程序员文章站 2022-04-11 18:49:17
目录系统启动的初始工作System Server进程Launcher进程六个大类ActivityThread启动流程APP启动流程ActivityManagerService相关启动流程图系统启动的初始工作1. Android 众多基于Linux内核的系统类似, 启动系统时, bootloader启动内核和init进程.2. init进程分裂出更多名为"daemons(守护进程)"的底层的Linux进程, 诸如android debug deamon, USB deamon等. 这些守护进程处理底层...



系统启动的初始工作

1. Android 众多基于Linux内核的系统类似, 启动系统时, bootloader启动内核和init进程.

2. init进程分裂出更多名为"daemons(守护进程)"的底层的Linux进程, 诸如android debug deamon, USB deamon等. 这些守护进程处理底层硬件相关的接口.

3. init进程会启动进程—“Zygote”.

  • 这个进程初始化了第一个VM.
  • 预加载framework和众多App所需要的通用资源.
  • 开启一个Socket接口来监听请求, 根据请求孵化出新的VM来管理新的App进程.
  • 收到新的请求后, Zygote会基于自身预先加载的VM来孵化出一个新的VM创建一个新的进程.

4. Zygote会孵化出一个超级管理进程—System Server. SystemServer会启动所有系统核心服务, 例如Activity Manager Service, 硬件相关的Service等. 到此, 系统准备好启动它的第一个App进程—Launcher进程了.

System Server进程

SystemServer进程是系统进程很多系统服务,例如ActivityManagerService、PackageManagerService、WindowManagerService…都是由该进程创建后启动

Launcher进程

1. 整个App启动流程的起点,负责接收用户点击屏幕事件

2. 它其实就是一个Activity,里面实现了点击事件,长按事件,触摸事件等

3. 是第一个被启动的APP进程

六个大类

ActivityManagerService:(AMS)AMS是Android中最核心的服务之一,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要,它本身也是一个Binder的实现类

Instrumentation:监控应用程序和系统的交互,也负责创建Activity,和管理其生命周期

ActivityThread:应用的入口类,通过调用main方法,开启消息循环队列。ActivityThread所在的线程被称为主线程

ApplicationThread:ApplicationThread提供Binder通讯接口,AMS则通过代理调用此App进程的本地方法

ApplicationThreadProxy:ApplicationThread在AMS服务中的代理类,负责与ApplicationThread通信

ActivityManagerProxy:AMS服务在当前进程的代理类,负责与AMS通信

ActivityThread启动流程

1. 进入main方法,初始化MainLooper,主线程Handler,同时初始化ApplicationThread(Binder线程,负责IPC通信)用于和AMS通信交互

2. 通过ActivityManagerProxy与AMS通信,发起attachApplication请求(作用是将ApplicationThread对象与AMS绑定,即让AMS持有ApplicationThreadProxy)

3. AMS发送handleBindApplication请求(初始化Application并调用onCreate方法)和创建Instrumentation以及 scheduleLaunchActivity请求(创建启动Activity)

4. App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送BIND_APPLICATION和LAUNCH_ACTIVITY消息

5. 主线程创建Application并调用onCreate方法,Instrumentation再通过反射机制创建目标Activity,并管理其生命周期(回调Activity.onCreate()等方法)

APP启动流程

—> Launcher 图标点击事件(startActivity(intent) intent使用·FLAG_ACTIVITY_NEW_TASK·标记)
—> 通知AMS(Binder)
—> AMS通知Launcher Paused
—> Launcher 通知AMS 自己已经 Paused
—> AMS查看是否有app进程的任务含有该Activity
—> 如果有则将该任务切换到前台
—> 如果没有则通知Zygote(Socket)
—> Zygote孵化出一个新的VM进程
—> VM载入相关类资源,并运行ActivityThread main方法
—> 进入ActivityThread启动流程

ActivityManagerService

1. 作用:AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作

2. 相关成员

  • ProcessRecord:记录一个进程中的相关信息, 该类中内部变量可分为三个部分,主要信息包括:该进程对应的APK文件的内部信息,该进程的内存状态信息,以及该进程中包含的所有Activity、Provider、Service等组件信息
  • ActivityRecord:记录了Activity的所有信息,因此它用来描述一个activity
  • ActivityStack:任务Task回退栈
  • TaskRecord:回退栈记录,一个TaskRecord对应一个ActivityRecord
  • 其他相关信息:包括Activity亲和性等

相关启动流程图

Android APP及ActivityThread启动流程是如何的

本文地址:https://blog.csdn.net/u013142672/article/details/107735211