Android Activity启动过程详解:从根Activity到子Activity

需积分: 9 2 下载量 149 浏览量 更新于2024-09-11 收藏 1.31MB DOCX 举报
"acitivity组件启动过程分析" 在Android操作系统中,Activity是构成应用程序核心的四大组件之一,负责呈现用户界面并处理与用户的交互。Activity组件的启动过程是Android应用程序生命周期的关键部分,涉及到多个系统服务和组件之间的交互。本文将深入探讨Activity的启动流程,主要参考了Gityuan和老罗的相关博文。 首先,Activity组件有两种启动方式:显示启动和隐式启动。显示启动需要明确指定待启动Activity的类名,而隐式启动则依据组件名称(包括ACTION、CATEGORY、DATA等Intent过滤器),无需知道具体的实现类。尽管启动方式有所不同,但两者的基本启动流程大体相同,只是查找目标Activity的策略有所差异。 根Activity是应用程序启动的起点,通常表现为应用程序启动器中的快捷图标。当用户点击这个图标时,系统开始执行启动过程。这个过程可以通过`adb shell dumpsys activity activities`命令来观察当前Activity的任务栈状态。 启动流程大致如下: 1. **Intent的创建与解析**:当用户触发Activity启动事件,比如点击应用图标,系统会创建一个Intent对象,包含启动请求的信息。 2. **IntentResolver的匹配**:系统会使用IntentResolver查找能够处理该Intent的Activity。对于显示启动,直接根据类名匹配;对于隐式启动,会根据Intent的ACTION、CATEGORY、DATA等属性与注册在Manifest.xml中的IntentFilter进行匹配。 3. **启动ActivityRecord**:找到合适的Activity后,系统创建一个ActivityRecord对象,存储了Activity的元数据,如组件名、Intent等。 4. **任务栈管理**:Android使用任务(Task)和活动栈(Activity Stack)的概念来管理Activity的启动和回退。新启动的Activity会被放入合适的位置,可能是新任务的栈顶,也可能是现有任务的栈顶,这取决于Intent的FLAG以及Manifest的配置。 5. **进程创建**:如果目标Activity不在运行的进程中,系统会创建一个新的进程或者复用已存在的进程,然后调用Activity的onCreate()方法,开始实例化Activity。 6. **视图构建**:在onCreate()之后,Activity会调用onStart()和onResume(),使得Activity对用户可见,并开始接收用户输入。同时,布局文件会被解析,视图层次结构会被构建。 7. **绘制与渲染**:最后,Activity的视图会被绘制到屏幕,完成启动过程。 以图2所示的示例,当从Launcher启动MyTest应用的根Activity MainActivity时,系统会创建一个新的任务栈,将MainActivity压入栈顶。如果MainActivity启动SubActivity1,这两个Activity会在同一进程内,直接调用onCreate()等方法。而当MainActivity启动SubActivity2,由于配置或Intent参数,SubActivity2可能会在新的进程中启动,此时涉及到跨进程通信。 Activity的启动涉及了Intent解析、进程管理、任务栈操作等多个环节,是Android系统运行的核心组成部分。理解这一过程有助于开发者优化应用性能,处理复杂的启动场景,以及解决与Activity生命周期相关的各种问题。