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的启动是一个涉及系统多个组件和进程相互协调的复杂过程。

相关推荐
Android系统攻城狮11 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
传奇开心果编程14 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
mmsx14 小时前
Android 地图数据链路:从 GDAL、KML 到多引擎适配
android·kotlin
2601_9689007715 小时前
大模型版本回归评估实战:从能力指标到额度口径的完整链路
android·数据挖掘·回归
ao-weilai17 小时前
MySQL数据库:基本查询
android·数据库·mysql
事圆则缓18 小时前
Kotlin 泛型方差实战:out、in、星投影与类型擦除
android·开发语言·kotlin
传奇开心果编程19 小时前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer
ao-weilai20 小时前
MySQL数据库:内置函数
android·数据库·mysql
SWAGGY..21 小时前
【C++进阶】:(7)红黑树的原理与 C++ 实现:结构设计、插入调整及性质验证
android·java·开发语言·c++·算法
Android打工仔21 小时前
CoroutineScheduler 设计解析(上)—— 为什么 Dispatchers.IO 会创建更多线程?
android·kotlin·源码阅读