我需要两个合子进程才能两次将系统派生到一个应用程序中,以处理不同级别的输入。
我在ZygoteInit.java文件中看到创建辅助受精卵取决于--abi-list。如果存在任何未支持的abi,则将创建zygote-secondary,但也将立即在函数waitForSecondaryZygote()中将其杀死,而不进行任何操作。插座在那里被杀死。
次生合子有什么需要?
如何创建另一个合子?
Zygote线安全吗?
最佳答案
支持多个ABI的设备可能具有多个Zygotes,并且应用程序在不同的Zygote上运行。 Android允许开发人员在其代码中选择ABI目标,因此从一个ABI目标切换到另一个目标可能需要一个新的Zygote分支。由于同时运行两个应用程序会引起问题,因此在创建新应用程序时应关闭第二合子进程。
说明这一点的一个好方法是在CyanogenMod集成更改以在单个设备上支持多个ABI配置时看到差异:
https://gitlab.com/CyanogenMod/android_frameworks_base/commit/402120a2236b294dff9a51461cb22400a6ef67f6
请注意,Zygote进程正在等待辅助进程终止,然后再创建新进程。
例如,支持ARM和Mips的设备可能具有某个应用程序,该应用程序有时会利用一个应用程序或另一个应用程序(这很少见)。如果APK或设备配置发生变化,则当向Zygote ARM发出请求时,它应在启动新请求之前检查Zygote Mips中的应用程序进程。
是的,Zygote是线程安全的。
编辑:
请注意,Build
对象具有一个SUPPORTED_ABIS
列表,该列表定义为:
此设备支持的ABI的有序列表。
http://developer.android.com/reference/android/os/Build.html#SUPPORTED_ABIS
我以ARM和Mips为例进行说明-一个更明显的示例可能是x86和x86_64,类似于Windows在同一设备上同时运行32位和64位代码的方式。