Android的类加载器

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

推荐阅读更多精彩内容

  • 心得体会:学习不仅仅只是看教程,最好能够想出代码实例去验证自己对某个方面的理解和判断,这样不仅能加深理解,还能够在...
    遛狗的程序员阅读 2,914评论 0 7
  • 本文要讲的就是 Android 中的 ClassLoader(类加载器)。要讲 Android 中的 ClassL...
    JackDaddy阅读 427评论 0 2
  • Android热修复原理简介 今天看到塞尔维亚总统在全国电视直播中说到,只有中国才能救我们的时候,作为中国人的那种...
    yosen阅读 447评论 1 2
  • Java类加载器(ClassLoader) Java中的ClassLoader是加载class文件,而Androi...
    凯玲之恋阅读 526评论 0 1
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,609评论 16 22