返回

源码剖析:Activity 启动与 App 启动流程 - Android 9.0

Android

在 Android 开发中,Activity 启动是启动和管理应用程序中屏幕的重要组成部分。了解 Activity 启动流程对于理解 Android 架构至关重要,这对于排查问题和提高应用程序性能也至关重要。

Android 9.0 中的 Activity 启动流程

在 Android 9.0 及更高版本中,Activity 启动流程经过了优化和改进,以提供更流畅和响应更迅速的用户体验。主要流程如下:

  1. Intent 创建: 应用程序代码中,使用 Intent 指定要启动的 Activity 和需要传参的数据。
  2. ActivityManagerService (AMS) 接收到 Intent: AMS 是负责管理应用程序启动和生命周期的系统服务。它接收 Intent,并根据 Activity 启动模式(standard、singleInstance、singleTask)决定如何处理启动请求。
  3. 启动 Activity: AMS 决定启动新的 Activity 或恢复已存在的 Activity。它会调用 ActivityThread.performLaunchActivity() 启动 Activity。
  4. 创建 Activity 实例: performLaunchActivity() 创建 Activity 实例,并调用其生命周期方法(onCreate()onStart()onResume())。
  5. 视图创建: Activity 创建其视图层次结构,调用 setContentView() 设置内容视图,并进行其他界面设置。
  6. Activity 启动完成: 当 Activity 完成其启动过程时,它会调用 onPostResume()。此时,Activity 已完全可见并可与用户交互。

App 启动流程

应用程序启动流程包括 Activity 启动流程和其他一些步骤:

  1. 启动 App 进程: 当用户启动应用程序时,Android 系统会启动一个新的 App 进程。
  2. AMS 创建 Application: AMS 在 App 进程中创建 Application 实例,并调用其生命周期方法。
  3. 启动 Activity: Application 决定启动哪个 Activity。它使用 Intent 向 ActivityManagerService (AMS) 发送启动请求。
  4. Activity 启动流程: 如上所述,AMS 根据 Activity 启动模式和 Intent,确定并启动 Activity。
  5. 初始化: 应用程序执行其自定义初始化代码,例如设置数据库连接、加载配置或预加载数据。
  6. 用户交互: 用户与应用程序交互,导致 Activity 创建、销毁或启动其他 Intent。

源码分析

为了深入了解 Activity 启动流程,我们分析了 Android 9.0 源码中的以下几个关键类:

  • ActivityManagerService (AMS): frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
  • ActivityThread: frameworks/base/core/java/android/app/ActivityThread.java
  • Application: frameworks/base/core/java/android/app/Application.java

常见问题与最佳实践

  • 避免在 Activity 启动时执行耗时操作: 耗时操作会阻塞 UI 线程,导致应用程序启动缓慢。应将此类操作安排在后台线程中执行。
  • 使用正确的 Activity 启动模式: 选择合适的 Activity 启动模式至关重要,可以防止创建不必要的新 Activity 或在意外情况下重复启动 Activity。
  • 优化启动时间: 使用 setTheme()setContentView() 快速设置 Activity 的布局,避免不必要的数据加载和处理。
  • 启用 StrictMode: 启用 StrictMode 可以检测启动过程中的性能问题,例如长时间的 UI 线程阻塞或内存泄漏。

总结

掌握 Activity 启动和 App 启动流程对于 Android 开发者至关重要。通过了解底层实现原理,开发者可以优化应用程序的启动时间,提高响应速度,并为用户提供无缝的用户体验。本文深入分析了 Android 9.0 中的启动流程,并提供了一些最佳实践,以帮助开发者构建高效且可靠的应用程序。