下面是一份 Android 類加載器雙親委派機制的時序圖示例,描述了當應用調用 loadClass() 時,各個加載器之間的委派過程。
圖中說明
- Client:表示發起加載請求的調用者(例如應用代碼)。
- App ClassLoader (Custom/DexClassLoader):應用默認的加載器(如 PathClassLoader 或 DexClassLoader),負責加載應用自身的類。
- Parent ClassLoader (PathClassLoader):上一級加載器,負責加載部分系統類庫和共享組件。
- Boot ClassLoader:最高層加載器,用于加載 Android 系統核心類(如 java.lang.、android. 等)。
流程解釋:
- 應用通過 App ClassLoader 調用
loadClass("TargetClass")
。 - App ClassLoader 首先檢查自己是否已經加載該類;若未加載,則將請求委派給父加載器(Parent ClassLoader)。
- Parent ClassLoader 同樣采用雙親委派,將請求向上委派給 Boot ClassLoader。
- Boot ClassLoader 嘗試在系統核心庫中查找該類,如果找到則返回相應的 Class 對象;否則,拋出 ClassNotFoundException。
- 結果依次向下傳遞,最終 App ClassLoader 返回給 Client。
這種雙親委派模型確保了系統核心類優先加載、避免用戶自定義類覆蓋系統類,從而保證了 Java/Android 的安全性和穩定性。