Android Activity 启动涉及几个进程

  1. Zygote进程 :

    Zygote进程在Android系统启动时被初始创建,并且初始化了虚拟机(Dalvik或ART),预加载了Android系统的核心类库。所有的Android应用进程都是通过fork()从Zygote进程派生出来的,这允许应用快速启动,因为它们继承了已加载的系统资源。

  2. Launcher进程 (Home应用) :

    Launcher,即Android的桌面应用,提供了用户界面来启动应用的Activity。这个进程有它自己的UI,当用户点击某个应用图标时,Launcher将发出一个Intent来请求启动对应的Activity。

  3. 系统服务进程 (system_server) :

    系统服务进程运行了许多Android系统服务,包括ActivityManagerService (AMS) 和 WindowManagerService (WMS)。

    • ActivityManagerService (AMS): 负责系统中所有应用的Activity的生命周期管理,包括Activity的启动、停止、任务栈管理等。当要启动新的Activity时,系统会通过AMS来协调这一过程。
    • WindowManagerService (WMS): 负责窗口管理,这包括Activity的窗口。WMS协调各个应用Activity的窗口在屏幕上的位置和Z顺序。
  4. 应用进程 :

    这是正在运行目标Activity的应用的进程。如果该应用尚未启动,将从Zygote进程fork出一个新的进程实例。

Activity的启动过程

当用户点击某个应用图标时(假设通过Launcher),Activity启动过程通常涉及以下步骤:

  1. Intent操作 :

    用户点击桌面Launcher上的图标,Launcher创建了一个启动特定Activity的Intent,并将其发送给AMS。

  2. AMS处理请求 :

    AMS接收到启动Activity的Intent后,首先检查相关的权限,判断请求的Activity所需的权限是否得到满足,接下来AMS会在内部创建一个新的Activity记录,并将其放入相应的任务栈中。

  3. 创建或唤醒应用进程 :

    如果目标Activity所在的应用已经有一个进程在运行,AMS就会将启动Activity的请求直接发送到那个进程。如果应用进程尚未存在,则AMS会通过Zygote进程创建一个新的进程。

  4. Activity实例化 :

    在应用进程中,系统使用应用的ClassLoader实例化新的Activity,并调用其onCreate()、onStart()、onResume()等生命周期方法准备显示到用户界面上。

  5. WMS布局和绘制 :

    Activity准备好后,WMS负责将Activity的窗口添加到屏幕上,并进行布局和绘制流程。此时,用户可以看到新的Activity界面。

  6. 用户交互 :

    完成上述步骤后,Activity现在已经处于运行状态,用户可以与它交云。

在整个过程中,尽管Activity的实际代码执行在单独的应用进程中,但AMS和WMS作为系统服务,它们的运作是在系统服务进程(system_server)中,并在不同的应用进程间协调Activity的启动和管理。这表明Activity的启动是一个涉及系统多个组件和进程相互协调的复杂过程。

相关推荐
三少爷的鞋9 小时前
现代 Android 架构指南:不要再主动设计 Callback 接口
android
TimeFine15 小时前
AI 编码工作流的设计
android·ai编程
骑着蜗牛撵大象32716 小时前
C++20 协程 × 屏障:手写一个 co_await 版 Barrier,让等待不再钉死线程
android·c++20·协程·并发编程·co_await·屏障同步
山东孙燕姿17 小时前
设备台账重构:从一张表到三层模型
android·java·网络·低代码·重构·rxjava
蒸鱼Yuzheng18 小时前
移动端 CPU 调度分析:线程亲和性、大小核迁移与卡顿
android·perfetto·性能分析·线程优化·cpu调度
booboosui19 小时前
安卓唤醒词:12 维 MFCC 加 DTW,阈值 1.8
android
传奇开心果19 小时前
Compose Multiplatform 共享边界实战:架构契约、互操作同步与可回退设计
android·kotlin
事圆则缓19 小时前
从开机到首帧:Android 系统与应用启动流程源码分析
android
AI吃大瓜19 小时前
指针压力表读数4:Android实现指针压力表读数(可实时检测)
android·指针读数·指针压力表·压力表·压力表读数
fengci.20 小时前
CTF2刷题记录(困难部分)
android·开发语言·前端·学习·php