一、分层架构总览

二、详细时序图(Mermaid)
三、逐步骤对象生命周期
步骤①-②:触摸 → Launcher 启动
步骤③-④:AMS 决策 → Zygote fork
步骤⑤:Zygote 子进程 → ActivityThread.main()
步骤⑥-⑦:AMS 响应接入 → 发 ClientTransaction
步骤⑧-⑨:App 进程收包 → TransactionExecutor 分发
步骤⑩:核心------Activity 对象诞生
步骤⑪-⑬:HomeActivity.onCreate() → 构建 View Tree
步骤⑭-⑯:onCreate 返回后 → 窗口可见
四、关键对象生命周期
| 对象 | 创建时机 | 创建者 | 生存期 |
|---|---|---|---|
| Looper (主线程) | ActivityThread.main() | Looper.prepareMainLooper() | 进程存活期间 |
| ActivityThread | ActivityThread.main() | new ActivityThread() | 进程存活期间 |
| Application | 第一个 Activity 启动前 | makeApplicationInner() | 进程存活期间 |
| HomeActivity | performLaunchActivity() | ClassLoader.newInstance() | 直到 onDestroy() 后 GC |
| PhoneWindow | activity.attach() | Policy.makeNewWindow() | 与 Activity 同生命周期 |
| DecorView | setContentView() | PhoneWindow.installDecor() | 与 Activity 同生命周期 |
| View Tree (所有子View) | setContentView() | LayoutInflater.inflate() | 与 DecorView 同生命周期 |
| ViewRootImpl | handleResumeActivity() | ViewRootImpl 构造 | 直到 Window 被移除 |
五、Binder 通信总结
整个流程中发生了 3 次关键 Binder IPC:
| 次数 | 方向 | 调用 | 作用 |
|---|---|---|---|
| 1 | Launcher → AMS | startActivity() | 发起启动请求 |
| 2 | App → AMS | ActivityThread.attach() | 报告进程就绪 |
| 3 | AMS → App | scheduleTransaction(ClientTransaction) | 下发 LaunchActivityItem + ResumeActivityItem |
六、你的 HomeActivity 代码在这个链路中的位置
java
// HomeActivity.java ------ 在步骤⑫被调用
public class HomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) { // ← Activity.performCreate() 第8595行调用
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home); // ← 触发 PhoneWindow 构建 View Tree
findViewById(R.id.entry_side_mirr).setOnClickListener(v ->
startActivity(new Intent(this, SideMirrActivity.class))); // 点击后又从步骤②重新走一遍
findViewById(R.id.entry_whl).setOnClickListener(v ->
startActivity(new Intent(this, WhlActivity.class)));
findViewById(R.id.entry_hvac).setOnClickListener(v ->
startActivity(new Intent(this, HvacActivity.class)));
}
}
你的代码里每一行 findViewById都依赖于 LayoutInflater.inflate()已经在 setContentView()→ PhoneWindow.setContentView()中完成了 activity_home.xml的全部 View 构建。这些 View 在 onCreate中已经存在于内存并挂载到 DecorView 树下,但此时屏幕还没渲染------渲染要等到 onResume之后的 makeVisible()+ performTraversals()。