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

相关推荐
hnlgzb37 分钟前
常见的Android Jetpack库会有哪些?这些库中又有哪些常用类的?
android·android jetpack
钛态4 小时前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
王码码20354 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
左手厨刀右手茼蒿4 小时前
Flutter for OpenHarmony: Flutter 三方库 shamsi_date 助力鸿蒙应用精准适配波斯历法(中东出海必备)
android·flutter·ui·华为·自动化·harmonyos
代码飞天4 小时前
wireshark的高级使用
android·java·wireshark
2501_915918415 小时前
苹果App Store上架审核卡住原因分析与解决方案指南
android·ios·小程序·https·uni-app·iphone·webview
skiy5 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
小小小点6 小时前
Android四大常用布局详解与实战
android
MinQ7 小时前
binder和socket区别及原理
android
Ehtan_Zheng7 小时前
Jetpack Compose 中绘制发光边框的多种方式
android