ClassLoader

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重复加载了会抛出异常

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容