1.˫?双亲?ί??Դ??
˫??ί??Դ??
ART 和 Dalvik 是两种不同的虚拟机,它们运行的委托是各自格式的字节码。Dalvik 执行的源码是 Dex 文件格式,专为 Dalvik 设计,双亲用于压缩多 .class 文件。委托ART(Android Runtime)是源码java 界面开发源码自 Android 4.4 开始的一个选项,自 Android 5.0 起成为默认运行时。双亲ART 和 Dalvik 兼容运行 Dex 字节码,委托因此,源码原先在 Dalvik 上运行的双亲应用在 ART 环境中也能正常运行。
在程序运行时,委托类加载机制负责加载 class 文件。源码ClassLoader 是双亲营收平台源码类加载的核心,用于加载程序运行时所需的委托 class 文件。每个 Class 对象都有一个 classLoader 字段,源码标识其是由哪个类加载器加载。
ClassLoader 的实现主要有:PathClassLoader 和 DexClassLoader。它们之间有共同的父类 BaseDexClassLoader。PathClassLoader 和 DexClassLoader 的量能突破标源码主要区别在于创建 DexClassLoader 时需要传递一个优化目录参数 optimizedDirectory,并将其创建为 File 对象传给 super,而 PathClassLoader 则直接给 null。两者都支持加载指定的 dex 以及 jar、zip、apk 中的 classes.dex 文件。optimizedDirectory 参数实际上就是黑猫vip影院源码 dexopt 产出目录。
在 API 源码中,DexClassLoader 的 optimizedDirectory 标记为废弃,实现变为与 PathClassLoader 相同,均不接收优化目录参数。
类加载器具有双亲委托机制。在加载类时,phpstudy 打开源码首先委托给父类加载器完成,如果无法完成,则由自身尝试加载。自己创建的类加载器 PathClassLoader 不仅能加载指定的 .dex 文件,还能加载程序中编写的类,利用双亲委托机制加载 Framework 中的类。
PathClassLoader 中的 findClass 方法在所有父类加载器无法加载类时被调用。此方法允许类加载器重写 loadClass 和 findClass,以定制类加载逻辑。PathClassLoader 未重写 loadClass,而是重写了 findClass 方法,根据路径列表查找类。
热修复技术允许在运行时更新类文件,解决程序中的 bug 或添加新功能。通过将出现问题的 class 文件单独制作成 fix.dex 文件(补丁包),并在程序启动时通过网络下载补丁包,将其保存至特定路径,创建 Element 对象并插入到类加载器 PathClassLoader 的 pathList 中的 dexElements 数组头部。这样,加载出现问题的 class 时会优先加载 fix.dex 中的修复类,解决 bug。
热修复技术不止一种实现方式,且完整实现可能需要考虑其他问题,如反射兼容性等。通过热修复,开发者可以在不重启应用的情况下更新类文件,提升应用的灵活性和维护性。