美文网首页
Android中的ClassLoader

Android中的ClassLoader

作者: 与神跳舞 | 来源:发表于2018-03-03 22:57 被阅读0次

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

    1. BootClassLoader
      BootClassLoader是ClassLoader内部类,是Android平台上所有ClassLoader的最终parent,这个内部类是包内可见,所以我们没法使用。
    2. PathClassLoader
      PathClassLoader只能加载已安装的apk的dex,用来加载Android系统类和应用的类,不建议开发者使用
    3. DexClassLoader
      DexClassLoader可以加载jar/apk/dex,也可以从SD卡中加载未安装的apk,动态加载、热修复等技术就是靠它来实现的
    Android ClassLoader

    简述ClassLoader的双亲委托模型

    某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

    双亲委托模型的好处是防止内存中出现多份同样的字节码,避免重复加载,比较安全

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

    一个ClassLoader可以包含多个dex文件,每个dex文件是一个Element,多个dex文件排列成一个有序的数组dexElements,ClassLoader会按照顺序依次遍历数组加载类,根据双亲委托模型,若一个dex已经被加载过,则不会再加载之后重复的dex,因此,只要把有问题的类修复后,放到一个单独的dex,通过反射插入到dexElements数组的最前面,这样在ClassLoader加载的时候会先加载已经修复好的dex,后面有bug的dex就不会被加载了

    相关文章

      网友评论

          本文标题:Android中的ClassLoader

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