Android中的热修复原理(通俗易懂)

脑子里一直有个梗,这个热修复到底是个什么东西呢?来来来,往下看!


    什么是热修复?

        说的清新脱俗一点,就是线上实时修复bug


      为什么要有热修复呢?(优点)

     

  降低了成本,用户体验也好,不用像原来修复bug(哪怕就是一行代码)还得重新打包再发送新版本到应用市场,再让用户下载,那样成本高不说,用户体验还特别不好,所以就出现了热修复。


  热修复的原理?

    

  热修复主要是通过android的类加载机制来实现的。Android中有两个类加载器PathClassLoader和DexClassLoader,准确的来说应该是有三个,还有一个BaseDexClassLoader,BaseDexClassLoader是上面这两个类加载器的父类,在BaseDexClassLoader里面有一个重要的属性DexPathList,DexPathListBaseDexClassLoader的构造函数中被创建出来,DexPathList里面有两个构造函数SplitDexPath()(将dexPath目录下的所有文件转成一个File集合)  和makeDexElments()(将File集合转为Elment数组), 在这个BaseDexClassLoader里面还有一个特别重要的方法,这也是它的核心方法。  findClass()从Elemet数组中拿出一个个dex文件,在从dex文件中搜索class,正因为这个特性,我们只需要将Element数组与App原Element数组合并,得到一个新的Element数组,要注意摆放的先后顺序,然后将这个新的Element数组用反射的方式赋值给App当前类加载器的pathList中的Elements数组,因为pathList的 findClass()是采用遍历方式一个个从Element中找class,而修复好的class所在的Element排在有Bug的class的Element的前面,所以,当App再次从类加载器中拿Class时就只会拿到前面的Class,也就是Bug已经修复好的class。这就是热修复的原理。。。  看图说话:



           


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值