从点击图标到 HomeActivity.onCreate() 完整链路
一、分层架构总览
二、详细时序图(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 代码在这个链路中的位置
// 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()。
