返回

Android系统揭秘(一):Activity启动流程(上)

Android

Android系统中的Activity启动流程

在Android系统中,Activity是用户交互和界面展示的核心组件。Activity的启动流程是一个复杂的过程,涉及多个系统组件的协作。本文将详细分析Android系统中Activity启动流程的上半部分,从Intent解析到ActivityThread.handleLaunchActivity()方法的调用。

Intent解析

Activity的启动是由Intent触发的。Intent是一个消息对象,包含了启动Activity所需的信息,例如要启动的Activity类、传递给Activity的数据以及启动模式等。当用户点击一个按钮或链接时,Android系统会生成一个Intent并将其放入队列中。

Intent解析是Activity启动流程的第一步。系统会从Intent中提取要启动的Activity类,并通过反射机制创建Activity对象。如果Activity已存在,系统会将其恢复到先前状态,否则会调用Activity的onCreate()方法创建新的实例。

ActivityThread.performLaunchActivity()方法

Activity对象创建后,系统会调用ActivityThread.performLaunchActivity()方法启动Activity。该方法负责协调Activity启动流程的后续步骤,包括:

  • 检查权限: 系统会检查当前进程是否有启动Activity所需的权限。如果没有,系统会抛出SecurityException异常。
  • 创建Application对象: 如果当前进程没有Application对象,系统会创建一个新的Application对象。Application对象是Android应用的入口点,负责管理应用的生命周期和全局配置。
  • 获取Instrumentation: 系统会获取Instrumentation对象,用于测试和调试Activity。
  • 创建Window: 系统会为Activity创建一个Window对象。Window对象负责管理Activity的窗口和视图层级。
  • 将Activity添加到任务栈: 系统会将Activity添加到当前任务栈中。任务栈是一组堆叠的Activity,代表用户在应用中导航的历史记录。
  • 启动Activity: 系统会调用Activity的onStart()和onResume()方法启动Activity。onStart()方法负责启动Activity的非UI相关初始化工作,onResume()方法负责恢复Activity的UI状态和交互。

Activity启动流程的上半部分总结

Activity启动流程的上半部分从Intent解析开始,经过一系列系统组件的协作,最终调用ActivityThread.handleLaunchActivity()方法启动Activity。这一过程中,系统完成了Activity对象的创建、权限检查、Application对象的创建、Window对象的创建、Activity的添加到任务栈以及Activity的启动。理解Activity启动流程的上半部分对于优化应用启动性能至关重要。