- ClassLoader 类的继承关系和父加载器的概念不同。父加载器通过组合的形式定义。
- 无论是 Android 还是 Java,类的加载均采用双亲委托模式
- Java 中的 ClassLoader 用来加载 class 文件
- Android 中的 ClassLoader 用来加载 dex 文件

- Bootstrap ClassLoader(引导类加载器)
- c/c++实现,加载 JDK 核心类库,如java.lang、java.uti;$JAVA_HOME/jre/lib、-Xbootclasspath
- Extensions ClassLoader(扩展类加载器)
- 加载 java 扩展类,$JAVA_HOME/jre/lib/ext、java.ext.dir 指定目录
- Application CloassLoader(应用程序类加载器)
- 加载当前程序 Classpath 目录、java.class.path 指定目录


- 解析:
- BootClassLoader
- 系统启动时预加载常见类。采取单例模式
- DexClassLoader
- 加载 dex 文件机器包含 dex 的压缩文件(apk 和 jar)
- PathCLassLoader
- 加载系统类和应用程序的类
- 其他
- ClassLoader 是抽象类,定义了ClassLoader 主要功能。
- 与 Java 中的 Bootstrap ClassLoader不同,Android 中的BootClassLoader 是 ClassLoader 的内部类,是 Java 类。而 Bootstrap ClassLoader 是 C++编写。
- SecureClassLoader 只是扩展了 ClassLoader,加入了权限相关功能,并非实现类。
- URLClassLoader 支持通过 URL从 jar 文件和文件夹加载类和资源
- InMemoryDexClassLoader 是 Android8.0新增,支持加载内存的 dex 文件
- BaseDexClassLoader 是 ClassLoader 的具体实现,PathClassLoader,DexClassLoader,InMemoryDexClassLoader 都是其子类。
- BootClassLoader
- 如果想保持双亲委派模式,则重写finClass(String name)
- 如果想破坏双亲委派模式,则重写loadClass(String name)[双亲委派的核心代码]
网友评论