ClassLoader笔记

Android中ClassLoader种类,作用和区别

1、BootClassLoader,单纯的ClassLoader类,虚拟机内置的类加载器,作为所有加载器的root parent。
2、PathDexClassLoader,ClassLoader子类,访问本地文件系统里的文件列表,用作加载Android系统以及已经安装过的apk文件列表里的类,无法从网络中加载类。
3、DexClassLoader,也是ClassLoader子类,能加载未安装的jar/apk/dex文件里的类,可以用作热更新动态加载补丁dex
4、InMemoryDexClassLoader,API 26添加,可以从包含dex文件的缓冲区加载类,可以执行那些还没被加载到本地文件系统里的代码。

ClassLoader的双亲委托

1、ClassLoader通过双亲委托机制来加载类,加载某个类时,这个类的ClassLoader(源ClassLoader)先判断有没有加载过该类,如果已经加载过,直接返回Class;如果没有,则委托ClassLoader的父ClassLoader来加载。如果还是没有,则一直往上到最上层父祖类BootClassLoader,如果BootClassLoader也没有加载过,那么就开始在其对应类的路径下寻找class字节码文件并载入,载入成功后返回Class;如果载入失败,则开始委托给子类加载器去载入文件中的class字节码,不成功则依次委托给子类的子类加载器...直到源ClassLoader,源ClassLoader如果也载入失败了,就结束加载,抛出异常。
一句话总结:
由子类往父类的findClass流程,以及由父类往子类方向的loadClass流程,一旦成功,流程便会终止并返回Class,失败则会尝试到底。

双亲委托在热修复领域的应用

系统在加载类前,会将所有的dex文件都整理成一个Element数组dexElement,热修复将补丁dex放在dexElement数组最前面,这样会优先加载补丁中dex里面的类,依从双亲委托机制,已经加载过后,不会重复加载,这样就达到了修复作用。

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

推荐阅读更多精彩内容

  • 从去年下半年开始,热修复技术在 Android 技术社区热了一阵子,这种不用发布新版本就可以修复线上 bug 的技...
    小小亭长阅读 6,373评论 6 19
  • 安卓插件化越来越流行,其中用到的技术不外乎加载外部的资源和加载外部的代码,关于加载外部资源我之前写过一篇文章《安卓...
    嘉伟咯阅读 1,631评论 5 14
  • ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见...
    时待吾阅读 1,093评论 0 1
  • 原文连接https://www.jianshu.com/p/cb39b1797326 前言 本文主要研究Andro...
    inquisiter阅读 674评论 0 0
  • 作者|五花马 太常引•人间八月 人间八月又佳期,淡月云来去。把酒邀清风,收乱云、秋空如扫。 霜华满地,孤光自照,肝...
    五花马00阅读 551评论 1 3