Android APP及ActivityThread启动流程是如何的
目录
系统启动的初始工作
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亲和性等
相关启动流程图
本文地址:https://blog.csdn.net/u013142672/article/details/107735211
上一篇: 只有女人才有的好东西,露咪咪图片!
推荐阅读
-
Android编程实现启动另外的APP及传递参数的方法
-
Android编程实现启动另外的APP及传递参数的方法
-
荐 Iphone App创建与审核步骤三:如何修改mac中App Identifiers的LaunchScreen.storyboard及Asset Catalog配置用于iOS启动页及其
-
Android app启动是出现白屏或者黑屏如何解决?
-
从一个点子到一个社区APP,是如何通过.NET实现的?——“文林物业系统”APP介绍及采访记录
-
如何用Android studio开发一个实现基本功能的新闻app?——简闻(源码及教程)
-
Android okhttp的启动流程及源码解析
-
Android 桌面应用启动APP的流程
-
荐 Iphone App创建与审核步骤三:如何修改mac中App Identifiers的LaunchScreen.storyboard及Asset Catalog配置用于iOS启动页及其
-
Android app启动是出现白屏或者黑屏如何解决?