Android类加载

双亲委托

某个类加载时,首先委托给parent加载,依次递归,如果parent可以拿到对象则返回,否则由子类获取

优点
  1. 避免重复加载
  2. 安全考虑,防止核心API被修改
    protected Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException
    {
            // First, check if the class has already been loaded
            Class<?> c = findLoadedClass(name);
            if (c == null) {
                try {
                    if (parent != null) {
                        c = parent.loadClass(name, false);
                    } else {
                        c = findBootstrapClassOrNull(name);
                    }
                } catch (ClassNotFoundException e) {
                    // ClassNotFoundException thrown if class not found
                    // from the non-null parent class loader
                }

                if (c == null) {
                    // If still not found, then invoke findClass in order
                    // to find the class.
                    c = findClass(name);
                }
            }
            return c;
    }

热修复

类加载是有先后顺序,
首先获取到当前应用PathClassLoader,通过反射获取到DexPathList的pathList;修改pathList中的dexElements,

  1. 把补丁包patch.dex转化为Element[] patch
  2. 获取到dexElement对象属性
  3. patch+Dexelement合并,并反射赋值给dexElements


    image.png
image.png
AndFix

反射 类加载


image.png

参考:https://www.bilibili.com/video/BV1tS4y1r7qe/?spm_id_from=333.880.my_history.page.click&vd_source=5e4ad34e631c98068c626ad8a062e008

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android的ClassLoader与java的ClassLoader有些差异, 双亲委托机制某个类加载器在加载...
    田_19ab阅读 370评论 0 0
  • 双亲委托机制 类在进行类加载的时候,把加载任务托管给父类加载器,如能加载成功,则返回,否则依次向子类加载器递归尝试...
    森屿暖茶阅读 426评论 0 1
  • 安卓虚拟机 Dalvik:Dalvik是Google公司用于android平台的java虚拟机。支持已转化为.de...
    remax1阅读 753评论 0 6
  • 本文要讲的就是 Android 中的 ClassLoader(类加载器)。要讲 Android 中的 ClassL...
    JackDaddy阅读 414评论 0 2
  • 当我们开发完一个APP,打包成了apk装进了手机,然后启动和使用APP,这一个过程中,必定会使用各种的类和方法,有...
    超人TIGA阅读 277评论 0 1