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

04-15 13:40