ActivityThread 是 Android 應用進程的主線程入口類,運行在 main() 方法中啟動的 Looper 線程(即 UI 線程)。它負責管理四大組件生命週期、處理系統 IPC 消息、維護進程級上下文資源,是應用與系統服務交互的核心樞紐。
Looper.prepareMainLooper() + Looper.loop(),處理 H 內部 Handler 分發的消息| 類/字段 | 作用 |
|---|---|
H extends Handler | 主線程消息處理器,定義 30+ 消息類型常量 (LAUNCH_ACTIVITY=100, RESUME_ACTIVITY=107...) |
ActivityClientRecord | Activity 在客戶端的運行時記錄:token、intent、state、activity 實例、window、配置等 |
AppBindData | 進程綁定應用數據:ApplicationInfo、提供者列表、儀器信息、調試模式等 |
LoadedApk | APK 級緩存:ClassLoader、Resources、ApplicationInfo、兼容性信息 |
ApplicationThread (Binder) | 實現 IApplicationThread AIDL 接口,接收 AMS 跨進程調用 |
mActivities (HashMap<IBinder, ActivityClientRecord>) | 當前進程所有 Activity 記錄映射表 |
mServices / mProviderMap | Service/ContentProvider 客戶端記錄 |
main())public static void main(String[] args) {
SamplingProfilerIntegration.start(); // 性能分析
Process.setArgV0("<pre class=\"code\">"); // 進程名
Looper.prepareMainLooper(); // 初始化主 Looper
if (sMainThreadHandler == null) sMainThreadHandler = new Handler();
ActivityThread thread = new ActivityThread();
thread.attach(false); // 綁定 AMS、獲取配置
Looper.loop(); // 進入無限消息循環
// loop 退出只有進程被殺
thread.detach();
}
H.handleMessage)AMS 通過 ApplicationThread.scheduleXxx 發送單向 Binder 調用,最終入隊 H 消息隊列,主線程依次處理:
scheduleLaunchActivity → H.LAUNCH_ACTIVITYhandleLaunchActivity → performLaunchActivity
LoadedApk、ClassLoaderInstrumentation.newActivity 反射實例化 ActivityContextImpl、關聯 Applicationactivity.attach() 綁定上下文、窗口、儀器Instrumentation.callActivityOnCreate() → onCreate()activity.performStart() → onStart()Instrumentation.callActivityOnPostCreate()handleResumeActivity → performResumeActivity
onNewIntent、onActivityResultactivity.performResume() → onResume()IdleHandler 上報 activityIdle 給 AMSPAUSE_ACTIVITY → performPauseActivity → onPause() → activityPaused 通知 AMSSTOP_ACTIVITY → performStopActivityInner → onStop() → 生成縮略圖/描述 → activityStoppedDESTROY_ACTIVITY → handleDestroyActivity → onDestroy() → 移除 Window、清理上下文scheduleConfigurationChanged → H.CONFIGURATION_CHANGEDhandleConfigurationChanged → applyConfigurationToResourcesLocked 更新所有 ResourcesComponentCallbacks (Activity、Service、Application、Provider) → 依次回調 onConfigurationChanged()CREATE_SERVICE → onCreate();BIND_SERVICE → onBind();SERVICE_ARGS → onStartCommand();STOP_SERVICE → onDestroy()installProvider 本地實例化或跨進程代理,引用計數管理 (ProviderRefCount)RECEIVER → 反射實例化 BroadcastReceiver → onReceive() → 有序廣播等待結果H 排序保證順序GcIdler 在消息隊列空閒時觸發 GC,間隔 ≥ 5s,減少卡頓ensureJitEnabled() 延遲啟動 JIT,優化啟動速度Looper.loop() 被長耗時操作阻塞 (如 onCreate 做 IO、鎖競爭、死鎖)。檢查 /data/anr/traces.txt 中 main 線程堆疊mActivities 持有已銷毀 Activity 引用 (未正確 remove)、非靜態內部類/匿名類持有外部引用、靜態集合累積attach()、performLaunchActivity 耗時過長,可用 TraceView/Perfetto 分析ActivityThread 是 Android 應用運行時的核心協調者,將系統服務的異步 IPC 請求轉化為主線程有序的生命週期回調,管理進程級資源緩存與配置分發。深入掌握其消息循環、組件代理、資源管理機制,對於性能優化、ANR 排查、插件化/熱修復框架開發、系統原理面試具有決定性價值。