美文网首页
第 10 周

第 10 周

作者: from0 | 来源:发表于2018-03-02 15:56 被阅读1次

    1、Android中有哪几种ClassLoader?它们的作用和区别是什么?

    1. BootClassLoader

      系统启动时创建的,是 PathClassLoader 的父加载器,PathClassLoader 继承自 BaseDexClassLoader,但是底层返回父类加载器返回的是 BootClassLoader。这个类与 ClassLoader 同级存在于一个文件中。

    2. PathClassLoader

      应用启动时创建的,从 data/app/… 安装目录下加载 apk 文件。App 安装到手机之后,apk 里面的 class.dex 中的 class 都是通过 PathClassLoader 来加载的

    3. BaseDexClassLoader

      ClassLoader 是个抽象类,具体实现的子类有 BaseDexClassLoader 和 SecureClassLoader。SecureClassLoader 的子类是 URLClassLoader ,其只能用来加载 jar 文件,这在 Android 的 Dalvik/ART 上没法使用的。
      Android 的 Dalvik/ART 不像 JVM 可以直接加载 class 文件,和 jar 文件中的 class,需要转化为 Dalvik byte code 才可以。只能通过 dex 或者 包含 dex 的 jar、apk 文件来加载,所有 Android 里面的 ClassLoader 都是由 BaseDexClassLoader 来处理。基本所有 classlaoder 都是继承了 BaseDexClassLoader。

    2、简述ClassLoader的双亲委托模型

    创建 Class 时首先去找对应的 ClassLoader 有没有被加载过,没加载过就询问父类,父类加载器再判断是否加载过,然后依次往父类询问。一直到最顶级的父加载器还找不到的话,自身就创建一个,这样保证一个类只会创建唯一的一个类加载器。

    3、简述双亲委托模型在热修复领域的应用

    Android 中查找类会在一个 dex 数组中遍历,一旦找到就不会往后找,热修复只要把修复后的类排在有 bug 的类之前,由于双亲委托机制,先加载到修复好的类,就不会加载到后面的 bug 类。

    参考

    Android ClassLoader 官方文档

    热修复入门:Android 中的 ClassLoader

    相关文章

      网友评论

          本文标题:第 10 周

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