Android开发实战班-Android App 的启动过程

Android 应用的启动过程是应用程序从用户点击图标到用户界面呈现给用户的关键步骤。理解应用的启动流程对于开发高效、响应迅速的 Android 应用至关重要。本章节将深入讲解 Android 应用从启动到显示用户界面的整个过程,包括系统启动流程、应用启动流程、Activity 启动流程以及相关的组件和概念。

5.1 Android 系统启动流程概述

在深入探讨应用启动流程之前,了解 Android 系统启动的基本流程有助于理解应用启动的背景:

  1. Bootloader 加载内核

    • 当设备启动时,Bootloader 加载 Android 操作系统的内核。
  2. 启动 Init 进程

    • 内核加载完成后,Init 进程(PID=1)启动,这是 Android 系统的第一个进程,负责启动其他系统服务。
  3. 启动 Zygote 进程

    • Zygote 进程是 Android 系统中的核心进程,负责预加载常用的 Java 类和资源,并为每个应用进程提供孵化服务。
  4. 启动 System Server

    • System Server 是 Android 系统中的核心服务进程,负责启动和管理系统服务,例如 Window Manager, Activity Manager, Package Manager 等。
  5. 启动 Launcher 应用

    • System Server 启动完成后,Launcher 应用(桌面应用)启动,用户可以开始使用设备。

5.2 应用启动流程

当用户点击应用图标时,Android 系统会启动应用进程,并创建应用的第一个 Activity。以下是应用启动的主要步骤:

  1. Launcher 发送启动 Intent

    • 用户点击应用图标时,Launcher 应用会发送一个启动应用的 Intent 给 Android 系统。
  2. ActivityManagerService 处理启动请求

    • Android 系统的 ActivityManagerService (AMS) 接收到启动请求后,会检查目标应用的进程是否已经启动。
  3. 启动应用进程

    • 如果应用进程尚未启动,AMS 会请求 Zygote 进程孵化一个新的应用进程。
    • 新进程启动后,会加载应用的 classes.dex 文件,并初始化应用的 Application 类。
  4. 创建 Application 对象

    • 应用进程启动后,会创建 Application 类的实例(如果定义了自定义的 Application 类)。
    • Application 对象在应用的整个生命周期内存在,可以用于初始化全局状态。
  5. 创建 Activity 对象

    • AMS 会通知应用进程创建目标 Activity 对象。
    • 应用进程会反射创建 Activity 对象,并调用其生命周期方法。
  6. 调用 Activity 生命周期方法

    • onCreate() -> onStart() -> onResume()
    • Activity 被创建并显示给用户。

5.3 Activity 启动流程

Activity 的启动是应用启动过程中最重要的部分。以下是 Activity 启动的主要步骤:

  1. 发送启动 Activity 的 Intent

    • 应用进程接收到 AMS 的启动请求后,会发送一个启动 Activity 的 Intent。
  2. 创建 Activity 对象

    • 应用进程通过反射机制创建 Activity 对象。
  3. 调用 Activity 生命周期方法

    • onCreate():
      • Activity 被创建时调用,进行初始化操作,例如设置布局、绑定数据等。
    • onStart():
      • Activity 对用户可见时调用。
    • onResume():
      • Activity 与用户交互时调用,Activity 处于前台,可以接收用户输入。
  4. WindowManager 添加窗口

    • Activity 创建完成后,WindowManager 会为 Activity 添加一个窗口,并将其显示在屏幕上。
  5. Activity 处于运行状态

    • Activity 处于前台,可以与用户进行交互。

5.4 关键组件与概念

  • Application 类:

    • 应用启动时创建的全局类,可以用于初始化全局状态,例如全局变量、数据库连接等。
    • 可以通过自定义 Application 类来扩展应用的功能。
  • ActivityManagerService (AMS):

    • Android 系统中的核心服务,负责管理 Activity 的生命周期、任务和回退栈等。
  • WindowManager:

    • 负责管理应用的窗口,例如 Activity 的窗口。
    • WindowManager 会为每个 Activity 创建一个窗口,并将窗口显示在屏幕上。
  • Zygote 进程:

    • Android 系统中的核心进程,负责预加载常用的 Java 类和资源,并为每个应用进程提供孵化服务。
  • Intent:

    • 用于在组件之间传递消息,例如启动 Activity、启动 Service 等。
    • Intent 可以是显式的(指定组件名称)或隐式的(指定动作和数据)。

5.5 课后作业

  1. 任务一:自定义 Application 类

    • 创建一个自定义的 Application 类,例如 MyApplication
    • MyApplication 中初始化全局状态,例如数据库连接、第三方库等。
    • AndroidManifest.xml 中注册自定义的 Application 类。
  2. 任务二:启动 Activity 的不同方式

    • 创建一个新的 Activity,例如 SecondActivity
    • 使用显式 Intent 启动 SecondActivity
    • 使用隐式 Intent 启动 SecondActivity,例如通过 ACTION_VIEW 动作。
  3. 任务三:观察应用启动流程

    • 在自定义的 Application 类和 Activity 的生命周期方法中添加日志输出。
    • 运行应用,观察日志输出,理解应用启动流程。

通过本章节的学习,学员将能够理解 Android 应用从启动到显示用户界面的整个过程,掌握 Application 类、ActivityManagerService、WindowManager 等关键组件的作用,并能够通过自定义 Application 类和不同方式启动 Activity 来扩展应用的功能。

作者简介

前腾讯电子签的前端负责人,现 whentimes tech CTO,专注于前端技术的大咖一枚!一路走来,从小屏到大屏,从 Web 到移动,什么前端难题都见过。热衷于用技术打磨产品,带领团队把复杂的事情做到极简,体验做到极致。喜欢探索新技术,也爱分享一些实战经验,帮助大家少走弯路!

温馨提示:可搜老码小张公号联系导师

相关推荐
Zhu7582 小时前
在k8s集群部署MySQL单实例,支持多个主流发行版
android·mysql·kubernetes
AFinalStone5 小时前
Android 7系统异常问题排查(四)Framework层(上)—System Server Watchdog
android·系统异常
宝杰X76 小时前
Android Room3 多平台数据库
android·数据库
huibin1478523699 小时前
热缓解学习记录
android·学习
小田的博客12 小时前
SAP MM 供应商银行主数据更新报错!message R1228!
android·java·服务器
一笑的小酒馆13 小时前
Android智能猫砂盆视频加载慢卡顿问题分析
android
只会cv的小前端15 小时前
七巧低代码服务端脚本使用方法
android·低代码·rxjava
15 小时前
Android 自定义 View 实战:从零打造工业级全向摇杆控件(OmniJoystickView)
android·kotlin·自定义view·摇杆控件
雨白15 小时前
深入理解 Kotlin 协程 (十一):以逸待劳,探秘 select 多路复用与并发安全策略
android·kotlin
hunterandroid17 小时前
[Android 从零到一] Android 深度链接与 App Links:从 URI Scheme 到可验证的应用跳转
android