美文网首页
Android的类加载器

Android的类加载器

作者: 田_19ab | 来源:发表于2020-11-05 14:05 被阅读0次

    Android的ClassLoader与java的ClassLoader有些差异,


    ClassLoader.png

    双亲委托机制
    某个类加载器在加载类时,首先将加载任务委托给父 - 类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务或者没有父类加载器时,才自己去加载。


    image.png
    好处是:
    1、避免重复加载,当父加载器已经加载了该类的时候,就没有必要子ClassLoader再加载一次。

    2、安全性考虑,防止核心API库被随意篡改。


    类查找流程.png
    热修复流程.png
    1、获取到当前应用的PathClassloader;
    2、反射获取到DexPathList属性对象pathList;
    3、反射修改pathList的dexElements
    1)把补丁包patch.dex转化为Element[] (patch)
    2)获得pathList的dexElements属性(old)
    3)patch+old合并,并反射赋值给pathList的dexElements
    image.png

    在不同的版本中可能不是makePathElement,或者参数会不同,需要适配!


    image.png

    相关文章

      网友评论

          本文标题:Android的类加载器

          本文链接:https://www.haomeiwen.com/subject/ofnovktx.html