【Android Activity启动流程】启动流程深入理解

文章目录

  • [1. 前置知识](#1. 前置知识)
    • [1.1 冷启动/热启动的定义](#1.1 冷启动/热启动的定义)
    • [1.2 Instrumentation类](#1.2 Instrumentation类)
    • [1.3 ActivityThread类](#1.3 ActivityThread类)
    • [1.4 ActivityManagerService(AMS)](#1.4 ActivityManagerService(AMS))
    • [1.5 AMS是如何集中管理全部应用的(一些核心概念)?](#1.5 AMS是如何集中管理全部应用的(一些核心概念)?)

添加链接描述
添加链接描述
添加链接描述

1. 前置知识

1.1 冷启动/热启动的定义

  • 冷启动:应用从无到有的过程,需要创建新的进程和对象,耗时较长;
    实际触发场景:
    用户从应用程序图标启动应用。
    应用在后台被系统杀死后重新启动。
    系统重启后首次启动应用。
  • 热启动:是从有到有,仅需要进行对象的状态恢复,因而耗时较短
    实际触发:
    用户通过任务管理器或最近应用列表切换到应用。
    应用在后台运行,用户返回时直接打开应用。

1.2 Instrumentation类

添加链接描述

是activity与外界联系的类(不是activity本身的统称外界,相对activity而言),activity通过Instrumentation来请求创建,ActivityThread通过Instrumentation来创建activity和调用activity的生命周期

1.3 ActivityThread类

1.主线程管理

主线程:ActivityThread 负责创建和维护应用的主线程。所有与用户界面相关的操作都在这个线程中执行,以确保线程安全和UI的流畅性

消息循环:它实现了一个消息循环,处理来自系统和其他组件的消息 。这些消息包括用户输入、系统事件、组件生命周期方法的调用等。
2. Activity 生命周期管理

ActivityThread 负责管理Activity的生命周期,包括创建、启动、暂停、恢复和销毁等状态。

当应用通过startActivity启动一个Activity时,ActivityThread 会接收这个请求并处理相应的生命周期回调。
3. Context 和 Application

ActivityThread 提供了应用的全局上下文(Application),使得应用中的各个组件可以访问到应用级别的信息和资源。

它还负责创建和维护应用的Application实例。
4. Intent 处理

ActivityThread 处理来自系统的Intent,并根据这些Intent启动相应的Activity或Service。

它会解析Intent并调用对应的组件,确保正确的参数和数据传递。
5. 多进程支持

Android支持多进程应用,ActivityThread 在多进程环境中负责管理各个进程中的Activity和Service的生命周期,确保它们之间的通信和协调。
6. 系统服务的访问

ActivityThread 还负责与Android系统服务进行交互,例如获取WindowManager、LayoutInflater等服务。

1.4 ActivityManagerService(AMS)

ActivityManagerService(AMS)是Android系统中一个关键的系统服务,负责管理应用程序的生命周期、任务和进程(所有APP共用一个 )。它在Android操作系统的框架层中起着重要的作用,主要涉及以下几个方面:
1. 应用程序管理

启动和停止应用:ActivityManagerService **负责启动和停止应用程序的进程。**它处理应用的启动请求并管理应用的生命周期。

任务和栈管理:AMS 维护着任务栈(task stack),每个任务可以包含多个Activity 。它管理这些任务的创建、切换和销毁。
2. 进程管理

进程启动:当用户启动一个应用时,AMS 会通过 ActivityThread 启动相应的进程 ,并确保该进程在需要时被创建。

进程优先级:AMS 管理进程的优先级,决定哪些进程可以继续运行,哪些需要被杀死以释放资源。
3. 组件生命周期管理

Activity 和 Service 的生命周期:AMS 负责调用各个组件(如Activity和Service)的生命周期方法,例如 onCreate()、onStart()、onDestroy() 等。

Broadcast 接收:AMS 也处理广播接收器的注册和调用,确保系统广播能正确传递给应用组件。
4. 权限管理

权限检查:AMS 负责检查应用程序的权限,确保应用只能访问其被授权的数据和资源。
5. 系统资源管理

内存管理:AMS 监控系统的内存使用情况,并根据需要杀死后台进程以释放资源。它会根据应用的优先级和状态决定哪些进程可以被终止。

应用的状态:AMS 维护应用的状态信息,例如是否在前台、后台,是否被用户可见等。
6. 多用户支持

多用户环境:在支持多用户的Android设备上,AMS 还负责管理不同用户的应用和任务,确保每个用户的应用和数据是隔离的。
7. 与其他系统服务的交互

AMS 与其他系统服务(如 WindowManagerService、PackageManagerService 等)紧密协作,确保应用能够正确地与系统资源交互。

1.5 AMS是如何集中管理全部应用的(一些核心概念)?

  • ActivityRecord:即对应一个Activity
  • TaskRecord :了解Activity启动模式的,应该知道singleInstance会有单独的任务栈,包括taskAffinity的栈亲和设置,都会影响ActivityRecord归属的TaskRecord任务栈
  • ActivityStack :则是维护一个应用内的TaskRecord,与TaskRecord结合实现了不同的启动模式和任务栈的切换,满足不同的需求和场景。也可以实现多窗口环境和多任务处理,提高用户体验和效率。
  • ActivityStackSupervisor:则是AMS进行统一管理Activity堆栈的大管家了,位于top栈顶的ActivityStack,即为被focus的应用
  • ProcessRecord :顾名思义就是应用进程的包装,前面提到新的应用进程完成创建后需要attach绑定给AMS
相关推荐
2501_915106325 小时前
当 altool 退出历史舞台,iOS 上传链路的演变与替代方案的工程实践
android·ios·小程序·https·uni-app·iphone·webview
共享家95275 小时前
MySQL 数据类型
android·数据库·mysql
前端不太难5 小时前
RN 版本升级、第三方库兼容、Android/iOS 崩溃(实战博文 — 从 0.63 升到 0.72)
android·ios·react
00后程序员张5 小时前
Transporter 的局限与替代路径,iOS 上传流程在多平台团队中的演进
android·ios·小程序·https·uni-app·iphone·webview
习惯就好zz5 小时前
如何解包 Android boot.img 并检查 UART 是否启用
android·linux·dtc·3588·dts·解包·dtb
每次的天空5 小时前
Android车机开发——内存优化操作
android·学习·设计模式
Digitally6 小时前
设置完成后,将数据从安卓设备传输到 iPhone
android·ios·iphone
独行soc6 小时前
2025年渗透测试面试题总结-276(题目+回答)
android·网络·python·安全·web安全·网络安全·渗透测试
Kapaseker6 小时前
如果我问你 Context,你扛得住吗?
android·kotlin
2501_937154936 小时前
IPTV 电视 2025 源码|智能解析 + 自定义界面
android·源码·源代码管理·机顶盒