ClassLoader

2017-11-21  本文已影响9人  hiLily

Android中的class loader如上图,class loader使用双亲委托模型,简单说就是当一个classloader开始加载类的时候,它总是让它的parent去尝试加载,如果失败,那么再尝试自己加载,这个设计的好处是带来安全性,避免了伪造类

DexClassLoader可以指定自己的optimizedDirectory,所以它可以加载外部的dex,因为这个dex会被复制到内部路径的optimizedDirectory;而PathClassLoader没有optimizedDirectory,所以它只能加载内部的dex,这些大都是存在系统中已经安装过的apk里面的。

通过XXX.getClassLoader()可以知道这个class是由哪个classloader加载的

一个运行的Android应用至少有2个ClassLoader,BootClassLoader(系统启动的时候创建的)以及PathClassLoader(应用启动时创建的)

同一个Class = 相同的 ClassName + PackageName + ClassLoader,如果同一个类被不同classloader重复加载了会抛出异常

上一篇下一篇

猜你喜欢

热点阅读