A: 当 按 电 源 键 触 发 开 机 , 首 先 会 从 ROM 中 预 定 义 的 地 方 加 载 引 导 程 序 BootLoader 到 RAM 中 , 并执 行 BootLoader 程 序 启动 Linux Kernel, 然后启动用户级别的第一个进程: init 进程。init 进程会解析init.rc 脚 本 做一些初始化工作,包括挂载文件系统、创建工作目录以及启动系统服务进程等,其中系统服务进程包括 Zygote、service manager、media 等 。在 Zygote 中 会 进 一 步 去 启 动 system_ server进 程 , 然 后 在 system_server 进 程 中 会 启 动 AMS、WMS、PMS 等 服 务 ,等 这 些 服 务 启 动 之 后 ,AMS 中 就 会 打 开 Launcher 应 用 的 home Activity, 最 终 就 看 到 了 手 机 的 "桌 面 "。
A:Zygote 作为一个孵化器,可以提前加载一些资源,这样 fork() 时基于 Copy-On-Write 机制创建的其他进程就能 直 接使用这些资源,而不用重新加载。 比如 system_server 就可以直接使用 Zygote 中的 JNI 函数、共享库、常用 的类、 以及主题资源。
A: 首 先 system_server 相 比 Zygote 多 运 行 了 AMS、 WMS 等 服 务 , 这 些 对 一 个 应 用 程 序 来 说 是 不 需 要的 。 另 外 进 程 的 fork() 对多线程不友好,仅会将发起调用的线程拷贝到子进程,这可能会导致死锁,而system_server 中肯定 是 有很 多线 程的 。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。