Android ClassLoader

卧疾丰暇豫,翰墨时间作。这篇文章主要讲述Android ClassLoader相关的知识,希望能为你提供帮助。
ClassLoader负责把类从磁盘加载进内存,交给虚拟机处理。
标准java虚拟机的ClassLoader体系结构如下(都是抽象类ClassLoader的子类)
 

Android ClassLoader

文章图片

ClassLoader使用双亲委派机制,加载一个类,先看上边一系列父类有没有加载,如果没有的话父类再传给下边的一系列子类让其自己加载。这样的好处是防止重复加载,父类加载一次,所有继承他的子类就都算加载了,并且安全性好,防止子类加载的类破坏父类已经加载的类。
Android ClassLoader

文章图片

这个算法逻辑是在loadClass方法里实现的,子类如果想添加自己的加载规则,不要覆盖这个类,而是覆写findClass,loadClass方法会在找不到类的使用调用子类的这个方法来加载
android里是从jar和odex,oat文件里加载类,对此定制了自己的ClassLoader体系,把虚拟机里的C++ bootstrap classloader放进了ClassLoader文件里,成为BootClassLoader,并添加了PathClassLoader(下边的图说的不准,未安装apk的dex也可以加载)和DexClassLoader,如下图
【Android ClassLoader】
Android ClassLoader

文章图片

下面先看ClassLoader文件
 

    推荐阅读