Android双亲委派机制

148 阅读2分钟

在Android中,双亲委派机制(也称为双亲委托机制)是类加载器加载类时遵循的一种层次结构和安全机制。以下是双亲委派机制在Android中工作的详细解释:

1. 定义

双亲委派机制是指当一个类加载器收到一个类加载请求时,它首先会把这个请求委派给父类加载器去完成,每个类加载器都是如此。这种机制确保了Java核心类的唯一性和安全性。

2. 工作流程

  • 当一个类加载器(如Application ClassLoader)收到一个类加载请求时,它首先会检查该类是否已经被加载过,如果已经加载过,则直接返回已加载的类;否则进入下一步。
  • 类加载器会将加载请求委派给其父类加载器(如Extension ClassLoader)。
  • 父类加载器会检查自己是否已经加载过该类,如果已经加载过,则直接返回已加载的类;否则继续向上委派给更上一层的父类加载器(如Bootstrap ClassLoader)。
  • 顶级父类加载器(Bootstrap ClassLoader)会尝试在Java的核心类库(如<JAVA_HOME>\lib)中加载该类。
  • 如果Bootstrap ClassLoader加载失败(即在核心类库中未找到所需类),则会将加载请求逐级向下交还给子类加载器(如Extension ClassLoader、Application ClassLoader)去尝试加载。
  • 如果子类加载器在自己的搜索范围内找到了该类,则进行加载;如果所有类加载器都无法加载该类,则会抛出ClassNotFoundException异常。

3. 优点

  • 沙箱安全机制:防止核心API库被随意篡改,确保Java核心类的唯一性和安全性。
  • 避免类的重复加载:当父亲已经加载了该类时,子加载器就没有必要再加载一次,保证被加载类的唯一性。

4. 类加载器类型

  • Bootstrap ClassLoader:启动类加载器,用于加载Android Framework层class文件。
  • Extension ClassLoader:扩展类加载器,用于加载扩展jar包中的class文件。
  • Application ClassLoader(也称为PathClassLoader):应用程序类加载器,用于加载应用程序的class文件。
  • DexClassLoader:用于加载指定的dex文件,以及jar、zip、apk中的classes.dex文件。

5. 总结

双亲委派机制是Android中类加载器加载类时遵循的一种重要机制,它确保了Java核心类的唯一性和安全性,并避免了类的重复加载。通过层次化的类加载器结构,Android实现了对类加载的灵活管理和控制。