先把结论放在前面:应用进程的创建是"系统请求、应用自己长出来"的过程——AMS 通过 socket 向 Zygote 发请求,Zygotefork出子进程并加载ActivityThread.main,然后是应用"向 AMS 注册"而不是"AMS 连上应用"。方向搞反是本篇最大的坑。第二个必答点是时序:ContentProvider的初始化早于Application.onCreate,所以启动耗时统计如果从onCreate开始算,会漏掉一大段。这两个点答准,本篇就通。四步主线[system_server] [Zygote] [新应用进程] │ │ │ 1. AMS 向 Zygote 发请求 ─── socket ────────►│ │ │ │ 2. fork() │ │ ├──────────────────────┤ │ │ ActivityThread.