1. Java中的类加载器
<> BootstrpLoader:C++实现、加载指定的JDK核心类库(java.lang、java.util)、/jre/lib路径下的类库。
<> ExtClassLoader:加载java的拓展类,/jre/lib/ext路径下的类库
<> ApplicationClassLoader:加载当前程序的ClassPath目录下的类
<> CutomClassLoader:自定义类加载器,实现findClass方法
2. Android中的类加载器
<> BootstrpLoader:系统启动时预加载常用类,用java实现的
<> PathClassLoader:加载已经安装过的apk的dex文件(data/cache),/data/app/package下的apk文件、也可以加载vendor/lib和System/lib 下的nativeLibrary
<> DexClassLoader:加载dex文件以及包含dex的压缩文件(apk和jar文件),动态加载
<> InMemoryDexClassLoader:在Android 8.0后加入,加载内存中的dex文件
3. PathClassLoader的创建
Zygote进程启动> fork自身创建子进程(SystemServer)>调用ZygoteInit的startSystemServer方法>ZygoteInit.handleSystemServerProcess() >在createPathClassLoader方法里调用PathClassLoaderFactory的CreateClassLoader >创建成功
4. BootstrpLoader的创建
Zygote进程启动—> fork自身创建子线程(SystemServer)—>调用ZygoteInit的preLoad方法—>调用ZygoteInit的preloadClasses方法?创建成功—>加载预加载类
预加载类:
ContextImpl、contextWraper、Dialog、Fragment、ApplicationPackage、ContentResolve
5. DexClassLoader
public class DexClassLoader extends Bas