文章目录
- [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
