当前位置: 首页 > article >正文

Android双亲委派

下面是一份 Android 类加载器双亲委派机制的时序图示例,描述了当应用调用 loadClass() 时,各个加载器之间的委派过程。

Client App ClassLoader (DexClassLoader/PathClassLoader) Parent ClassLoader (PathClassLoader) BootClassLoader 应用代码调用加载请求 loadClass("TargetClass") 1. 检查是否已加载 2. 未加载则委派父加载器 loadClass("TargetClass") 1. 继续委派给父加载器 (BootClassLoader) loadClass("TargetClass") 1. 查找系统核心类 2. 若未找到,抛异常 返回Class对象 ClassNotFoundException alt [类存在] [类不存在] ClassNotFoundException 父类加载失败 尝试自行加载 findClass("TargetClass") 返回Class对象 ClassNotFoundException alt [加载成功] [加载失败] 返回Class对象 返回Class对象 alt [父类返回异常] [父类返回Class] Client App ClassLoader (DexClassLoader/PathClassLoader) Parent ClassLoader (PathClassLoader) BootClassLoader

图中说明

  • Client:表示发起加载请求的调用者(例如应用代码)。
  • App ClassLoader (Custom/DexClassLoader):应用默认的加载器(如 PathClassLoader 或 DexClassLoader),负责加载应用自身的类。
  • Parent ClassLoader (PathClassLoader):上一级加载器,负责加载部分系统类库和共享组件。
  • Boot ClassLoader:最高层加载器,用于加载 Android 系统核心类(如 java.lang.、android. 等)。

流程解释

  1. 应用通过 App ClassLoader 调用 loadClass("TargetClass")
  2. App ClassLoader 首先检查自己是否已经加载该类;若未加载,则将请求委派给父加载器(Parent ClassLoader)。
  3. Parent ClassLoader 同样采用双亲委派,将请求向上委派给 Boot ClassLoader。
  4. Boot ClassLoader 尝试在系统核心库中查找该类,如果找到则返回相应的 Class 对象;否则,抛出 ClassNotFoundException。
  5. 结果依次向下传递,最终 App ClassLoader 返回给 Client。

这种双亲委派模型确保了系统核心类优先加载、避免用户自定义类覆盖系统类,从而保证了 Java/Android 的安全性和稳定性。


http://www.kler.cn/a/577600.html

相关文章:

  • PostgreSQL 如何有效地处理数据的加密和解密
  • Trae:引领未来的 AI 编程新时代
  • Kotlin D1
  • 你会测量管道液体流阻吗?西-魏斯巴赫方程(Darcy-Weisbach Equation)、Colebrook-White 方程帮你
  • 面试基础---高并发高可用架构下读写分离与数据分片如何设计
  • 装饰器模式--RequestWrapper、请求流request无法被重复读取
  • idea中隐藏目录
  • Go+eBPF kprobe 禁止运行指定程序
  • 芯麦GC4931P与A4931/Allegro在电机驱动应用中的对比与优势
  • C/C++蓝桥杯算法真题打卡(Day3)
  • 计算机毕业设计SpringBoot+Vue.js小区团购管理系统(源码+文档+PPT+讲解)
  • IDE集成开发环境MyEclipse中安装SVN
  • 1.12.信息系统的分类【ES】
  • 表格columns拼接两个后端返回的字段(以umi框架为例)
  • 基于Qwen-VL的手机智能体开发
  • Redis常问八股(一)
  • [HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署
  • 安装好pycharm后,双击pycharm,出现“无法找到入口”,怎么办?
  • 005-获取内存占用率
  • Go学习笔记:基础语法2