Android中的ClassLoader

Android中有哪几种ClassLoader?它们的作用和区别是什么?

  1. BootClassLoader
    BootClassLoader是ClassLoader内部类,是Android平台上所有ClassLoader的最终parent,这个内部类是包内可见,所以我们没法使用。
  2. PathClassLoader
    PathClassLoader只能加载已安装的apk的dex,用来加载Android系统类和应用的类,不建议开发者使用
  3. DexClassLoader
    DexClassLoader可以加载jar/apk/dex,也可以从SD卡中加载未安装的apk,动态加载、热修复等技术就是靠它来实现的
Android中的ClassLoader_第1张图片
Android ClassLoader

简述ClassLoader的双亲委托模型

某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

双亲委托模型的好处是防止内存中出现多份同样的字节码,避免重复加载,比较安全

简述双亲委托模型在热修复领域的应用

一个ClassLoader可以包含多个dex文件,每个dex文件是一个Element,多个dex文件排列成一个有序的数组dexElements,ClassLoader会按照顺序依次遍历数组加载类,根据双亲委托模型,若一个dex已经被加载过,则不会再加载之后重复的dex,因此,只要把有问题的类修复后,放到一个单独的dex,通过反射插入到dexElements数组的最前面,这样在ClassLoader加载的时候会先加载已经修复好的dex,后面有bug的dex就不会被加载了

你可能感兴趣的:(Android中的ClassLoader)