从点击图标到 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 代码在这个链路中的位置

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()