Android源码之App启动

目录

App启动概述

App启动过程

App启动过程图

源码概述

跨进程启动

进程内启动


下面以应用桌面Launcher启动App的MainActivity来举例:

App启动概述

首先,MainActivity是由Launcher组件来启动的,而Launcher又是通过Activity管理服务ActivityManagerService(AMS)来启动MainActivity组件的。由于MainActivity组件和Launcher组件,以及AMS是三个不同的进程, 所以这三个不同的进程只能通过 Binder进程间通信机制来完成MainActivity组件的启动过程。

App启动过程

  1. Launcher组件向AMS发送一个启动MainActivity组件进程间通信请求。
  2. AMS首先要将启动MainActivity的信息保存起来,然后向Launcher发送一个中止状态的进程间通信请求。
  3. Launcher组件进入到中止状态以后,会向AMS发送一个已经进入了中止状态的进程间通信请求,以便 AMS可以继续执行启动 MainActivity组件的操作。
  4. AMS如果发现启动MainActivity进程不存在,就会创建一个新的应用程序进程。
  5. 新的应用程序进程启动后,就会向AMS发送一个启动完成的进程间通信请求,以便 AMS可以继续执行启动MainActivity组件的操作。
  6. AMS将第二步保存下来的MainActivity的信息发送到第四步启动创建的应用程序进程,以便它可以将MainActivity组件启动起来。

App启动过程图

源码概述

跨进程启动

  1. 当前进程请求AMS:当前进程采用Binder IPC向system_server进程(AMS)发起startActivity请求;
  2. AMS发送创建应用进程请求:system_server进程接收到请求后,向zygote进程发送创建进程的请求;
  3. Zygote进程接受请求并fork应用进程,即App进程;
  4. App进程通过Binder向AMS发起attachApplication请求,AMS绑定ApplicationThread;
  5. AMS发送启动Activity请求:system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;
  6. ActivityThread的Handler处理启动Activity请求:App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程(ActivityThread)发送LAUNCH_ACTIVITY消息;
  7. 主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate、onResume等方法,UI渲染结束后便可以看到App主界面。

进程内启动

  1. 当前进程请求AMS;
  2. AMS发送启动Activity请求:system_server进程接收到请求后,解析Activity信息、处理启动参数,并给当前进程发送 scheduleLaunchActivity请求;
  3. ActivityThread的Handler处理启动Activity请求:App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程(ActivityThread)发送LAUNCH_ACTIVITY消息;
  4. 主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate、onResume等方法,UI渲染结束后便可以看到App主界面。
相关推荐
Lei活在当下8 分钟前
【业务场景架构实战】8. 订单状态流转在 UI 端的呈现设计
android·设计模式·架构
小趴菜822721 分钟前
Android中加载unity aar包实现方案
android·unity·游戏引擎
qq_2529241925 分钟前
PHP 8.0+ 现代Web开发实战指南 引
android·前端·php
Jeled25 分钟前
Android 本地存储方案深度解析:SharedPreferences、DataStore、MMKV 全面对比
android·前端·缓存·kotlin·android studio·android jetpack
2501_915918417 小时前
掌握 iOS 26 App 运行状况,多工具协作下的监控策略
android·ios·小程序·https·uni-app·iphone·webview
2501_9159090610 小时前
iOS 混淆实战,多工具组合完成 IPA 混淆与加固(源码 + 成品 + 运维一体化方案)
android·运维·ios·小程序·uni-app·iphone·webview
*才华有限公司*11 小时前
安卓前后端连接教程
android
氦客11 小时前
Android Compose中的附带效应
android·compose·effect·jetpack·composable·附带效应·side effect
雨白12 小时前
Kotlin 协程的灵魂:结构化并发详解
android·kotlin