android开发分享Android APP及ActivityThread启动流程是如何的

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

目录

    • 系统启动的初始工作
    • System Server进程
    • Launcher进程
    • 六个大类
    • ActivityThread启动流程
    • APP启动流程
    • ActivityManagerService
    • 相关启动流程图

系统启动的初始工作

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启动流程是如何的

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/894880.html

(0)
上一篇 2021年10月21日
下一篇 2021年10月21日

精彩推荐