卧疾丰暇豫,翰墨时间作。这篇文章主要讲述Android ClassLoader相关的知识,希望能为你提供帮助。
ClassLoader负责把类从磁盘加载进内存,交给虚拟机处理。
标准java虚拟机的ClassLoader体系结构如下(都是抽象类ClassLoader的子类)
文章图片
ClassLoader使用双亲委派机制,加载一个类,先看上边一系列父类有没有加载,如果没有的话父类再传给下边的一系列子类让其自己加载。这样的好处是防止重复加载,父类加载一次,所有继承他的子类就都算加载了,并且安全性好,防止子类加载的类破坏父类已经加载的类。
文章图片
这个算法逻辑是在loadClass方法里实现的,子类如果想添加自己的加载规则,不要覆盖这个类,而是覆写findClass,loadClass方法会在找不到类的使用调用子类的这个方法来加载
android里是从jar和odex,oat文件里加载类,对此定制了自己的ClassLoader体系,把虚拟机里的C++ bootstrap classloader放进了ClassLoader文件里,成为BootClassLoader,并添加了PathClassLoader(下边的图说的不准,未安装apk的dex也可以加载)和DexClassLoader,如下图
【Android ClassLoader】
文章图片
下面先看ClassLoader文件
推荐阅读
- Android WebView中软键盘会遮挡输入框相关问题
- Mac appium apk覆盖性安装的问题
- 客户端与服务端,java与Android跨平台服务
- Android sdk 更新后编译不过,Could not find com.android.sdklib.build.ApkBuilderMain
- 福到家系统APP制作
- 不写一行代码创建Fiori App
- Android4.42-Settings源代码分析之蓝牙模块Bluetooth总体实现(总)
- Android推送进阶课程学习笔记
- androidstudio连接SCM Manager上的Git库