gpt4 book ai didi

android - 在 Android 中为同一个应用程序创建第二个 zygote 进程

转载 作者:行者123 更新时间:2023-11-30 01:34:10 34 4
gpt4 key购买 nike

我需要两个 zygote 进程来 fork 系统两次,以便应用程序处理不同级别的输入。

我在 ZygoteInit.java 文件中看到,创建辅助受精卵取决于 --abi-list。如果有任何不受支持的 abi,​​那么 zygote-secondary 将被创建,但它也会在函数 waitForSecondaryZygote() 中立即被杀死,而不做任何事情。套接字在那里被杀死。

次Zygote需要什么?我如何创建另一个 Zygote?Zygote 线程安全吗?

最佳答案

支持多个 ABI 的设备可能有多个 Zygote,一个应用程序运行在不同的 Zygote 上。 Android 允许开发人员在他们的代码中选择 ABI 目标,因此从一个 ABI 目标切换到另一个可能需要一个新的 Zygote 分支。由于同时运行两个应用程序会导致问题,因此在创建新应用程序时应关闭辅助 zygote 进程。

说明这一点的一个好方法是在 CyanogenMod 集成更改以在单个设备上支持多个 ABI 配置时查看差异:

https://gitlab.com/CyanogenMod/android_frameworks_base/commit/402120a2236b294dff9a51461cb22400a6ef67f6

请注意,Zygote 进程在创建新进程之前等待次级进程结束。

例如,支持 ARM 和 Mips 的设备可能有一个应用程序有时使用一个或另一个(这种情况很少见)。如果 APK 或设备配置发生变化,那么当对 Zygote ARM 的请求开始时,它应该在开始新的请求之前检查 Zygote Mips 中的应用程序进程。

是的,Zygote 是线程安全的。

编辑:

请注意,Build 对象有一个 SUPPORTED_ABIS 列表,定义为:

An ordered list of ABIs supported by this device.

http://developer.android.com/reference/android/os/Build.html#SUPPORTED_ABIS

我使用 ARM 和 Mips 作为示例 - 一个更明显的例子可能是 x86 和 x86_64,类似于 Windows 在同一设备上运行 32 位和 64 位代码的方式。

关于android - 在 Android 中为同一个应用程序创建第二个 zygote 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321814/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com