- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试了解 Android 如何启动应用程序。问题是 Zygote 如何(以及为什么) fork 一个新的 Dalvik VM?我不明白为什么不能在同一个 Dalvik VM 中运行多个应用程序。
最佳答案
Q. how does zygote exactly fork Dalvik VM?
简答:Zygote 进程在系统启动时冷启动 Java VM。然后它监听套接字以获取传入命令。每当应用程序需要新进程时,其他进程(例如 ActivityManagerService)将命令写入此套接字。这些命令由 Zygote 进程读取,该进程根据需要调用 fork()。子进程获得一个预热的虚拟机来运行。这就是 Zygote fork Dalvik VM 的方式。
长答:内核加载完成后,解析init.rc
,启动原生服务。那么/system/bin/app_process
) 运行。这最终会调用 AndroidRuntime.start()
,将参数 com.android.internal.os.ZygoteInit
和 start-system-server
传递给它。
AndroidRuntime.start()
启动 Java VM,然后调用 ZygoteInit.main()
,将参数 start-system-server
传递给它。
ZygoteInit.main()
注册 Zygote 套接字(Zygote 进程监听传入的命令,并在收到新命令时根据请求生成一个新进程)。然后它会预加载很多类(如 frameworks/base/preloaded-classes 中所列,在 Android 8.0 中超过 4500 个)和所有系统范围的资源,如可绘制对象、xml 等。然后它调用 fork 的 startSystemServer()
com.android.server.SystemServer
的新流程.此 fork 很特殊,与 Zygote 代表请求进程执行的通常 fork 不同。
SystemServer 被派生后,runSelectLoopMode()
函数被调用。这是一个 while(true)
循环,它与 Zygote 套接字建立 ZygoteConnection
并等待其上的命令。收到命令时,ZygoteConnection.runOnce()
被调用。
ZygoteConnection.runOnce()
然后调用Zygote.forkAndSpecialize()
然后调用 native 函数来执行实际的 fork 。因此,就像 SystemServer 的情况一样,创建了一个子进程,它为自己继承了一个预热的 Dalvik VM。
Q. why it is not possible to run multiple applications in the same Dalvik VM?
据我所知,这是一个设计决策。 Android 人员刚刚决定通过沙盒为每个进程分配一个新的虚拟机以确保安全。
关于android - 了解安卓: Zygote and DalvikVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9153166/
当我在运行时启动我的应用程序时,出现两个错误。我不明白问题是什么以及如何删除它。 06-17 18:10:59.213 22163-22163/? E/Zygote: v2 06-17 18:10:5
zygote 如何处理 android 中的共享库?Zygote 是 Android 中的一个特殊进程,负责处理每个新应用程序进程的 fork 。这些进程只是普通的 Linux 进程。我们可以将 Zy
我正在尝试了解 Android 如何启动应用程序。问题是 Zygote 如何(以及为什么) fork 一个新的 Dalvik VM?我不明白为什么不能在同一个 Dalvik VM 中运行多个应用程序。
给定下面的函数 f!: function f!(s::Vector, a::Vector, b::Vector) s .= a .+ b return nothing end # f! 如
我需要两个 zygote 进程来 fork 系统两次,以便应用程序处理不同级别的输入。 我在 ZygoteInit.java 文件中看到,创建辅助受精卵取决于 --abi-list。如果有任何不受支持
是否可以在zygote之外启动原生android可执行文件? 最佳答案 我发现在我的 native 应用程序中使用以下代码对您的应用程序进行守护进程会使其与 zygote 分离。 /* Daemoni
在 Dalvik VM 中,Zygote 的角色是(是)充当新应用程序的启动台和实时核心库的存储库,所有应用程序都可以在其生命周期中引用这些库。随着 ART 的推出,Zygote 有什么变化吗? Zy
当我尝试执行我的 helloworld 应用程序时出现 Zygot 错误。 05-02 15:32:49.067: ERROR/Zygote(32): setreuid() failed. errno
我正在研究在 Java Android 应用程序和/或其自身的 JNI 中获取 super 用户权限的可能方法。众所周知的答案似乎是只能从那里运行“su”子 shell 和命令行命令,这既不简洁也不实
我可以使用 GitHub stdchpie/android-openssl 为 android(libcrypto.so 和 libssl.so)成功构建 openssl-1.0.2j| : 环境:L
启动镜像加载(boot.oat、boot.art) 当 Android 启动时,它会加载一些 boot images,其中包含一些常用的类。特别是 boot.oat 包含类的代码,以及 boot.ar
在 的帮助下,我在 Android Studio 中做了一个 Simple Android OCR 的变体Tesseract OCR。使用相机后,应用程序停止并出现以下错误.. 如何解决? E/Zyg
12-15 01:08:43.226 30125-30125/? E/Zygote: MountEmulatedStorage() 12-15 01:08:43.226 30125-30125/? E
我正在使用 Google API 构建 map 应用程序。我收到此错误: E/zygote:Android 版本 >= 6.0 上不存在 String#value 字段 我不知道如何摆脱它。我搜索了所
我正在通过提供的 getting started guide 基于 CameraX Jetpack 支持库开发一个简单的应用程序和一个 GitHub repo .获取错误 I/zygote: Reje
我在 PID 上使用 showmap 命令,但我无法理解报告中的这一部分: 16384 3752 689 0 3132 0 620
我是一名优秀的程序员,十分优秀!