返回
源码剖析:Activity 启动与 App 启动流程 - Android 9.0
Android
2023-11-13 11:29:28
在 Android 开发中,Activity 启动是启动和管理应用程序中屏幕的重要组成部分。了解 Activity 启动流程对于理解 Android 架构至关重要,这对于排查问题和提高应用程序性能也至关重要。
Android 9.0 中的 Activity 启动流程
在 Android 9.0 及更高版本中,Activity 启动流程经过了优化和改进,以提供更流畅和响应更迅速的用户体验。主要流程如下:
- Intent 创建: 应用程序代码中,使用
Intent
指定要启动的 Activity 和需要传参的数据。 - ActivityManagerService (AMS) 接收到 Intent: AMS 是负责管理应用程序启动和生命周期的系统服务。它接收 Intent,并根据 Activity 启动模式(standard、singleInstance、singleTask)决定如何处理启动请求。
- 启动 Activity: AMS 决定启动新的 Activity 或恢复已存在的 Activity。它会调用
ActivityThread.performLaunchActivity()
启动 Activity。 - 创建 Activity 实例:
performLaunchActivity()
创建 Activity 实例,并调用其生命周期方法(onCreate()
、onStart()
、onResume()
)。 - 视图创建: Activity 创建其视图层次结构,调用
setContentView()
设置内容视图,并进行其他界面设置。 - Activity 启动完成: 当 Activity 完成其启动过程时,它会调用
onPostResume()
。此时,Activity 已完全可见并可与用户交互。
App 启动流程
应用程序启动流程包括 Activity 启动流程和其他一些步骤:
- 启动 App 进程: 当用户启动应用程序时,Android 系统会启动一个新的 App 进程。
- AMS 创建 Application: AMS 在 App 进程中创建
Application
实例,并调用其生命周期方法。 - 启动 Activity:
Application
决定启动哪个 Activity。它使用Intent
向 ActivityManagerService (AMS) 发送启动请求。 - Activity 启动流程: 如上所述,AMS 根据 Activity 启动模式和 Intent,确定并启动 Activity。
- 初始化: 应用程序执行其自定义初始化代码,例如设置数据库连接、加载配置或预加载数据。
- 用户交互: 用户与应用程序交互,导致 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 中的启动流程,并提供了一些最佳实践,以帮助开发者构建高效且可靠的应用程序。