类装载器DexClassLoader (android内核剖析)

时间:2022-11-07 19:37:44

 在java环境中,有个概念叫做“类装载器”,其作用是动态装载Class文件。标准的java SDK中有一个ClassLoader类,借助它可以装载

想要的Class文件,每个Classoader对象在初始化时必须指定Class文件的路径。

 



使用类加载器的原应:

  import中所引用的类文件有两个特点:

           必须存在于本地 当程序运行是需要该类时,内部类装载器会自动装载该类,这对程序员来讲是透明的 即程序原不知道该过程


        编译时必须在现场,负责编译过程会因为找不到引用文件而不能正常编译。

但在有些情况下,所需要的类却不能满做以上两个条件 比如要执行的程序在服务器端,另一种情况是 要引用的Class文件不方便在编译时

直接参与,而只能在运行时动态调用。

这就是使用ClassLoader的原因。

  一般情况下,应用程序不许要创建一个全新的ClassLoader对象,而是使用当前环境已经存在的ClassLoader。因为java的Runtime

环境在初始化时,其内部会创建一个Classoader对象用于加载Runtime所需的各种java类

 每个ClassLoader必须要有一个父ClassLoader在庄子啊Class文件时,子ClassLoader会先请求其父ClassLoader加载该Class

只有当其父ClassLoader找不到该Class文件时,子ClassLoader才会继续装载该类,这是一种安全机制。



对于android的应用程序 本质上虽然是java开发,并且使用标准的java编译器编译出Class文件 但最终的APK文件中包含的确实dex

类型的文件 dex文件是将所需的所有class文件重新到包,打包的规则不是简单的压缩,而是完全对class文件内部的各种函数表

变量表进行优化,并产生一个新的文件 这就是dex文件 由于dex文件是一种经过优化的Class文件因此要加载这样特殊的Class文件就余姚特殊的

类装载器,这就是DexClassLKoader Android SDK 中提供类DexClassLoader 类就是出于这个目的