Android双亲委派
下面是一份 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 的安全性和稳定性。