美文网首页我爱编程
Android中的classLoader

Android中的classLoader

作者: suxm | 来源:发表于2018-03-11 19:58 被阅读15次

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

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

    简述ClassLoader的双亲委托模型

    如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加
    载这个类,而是把这个请求委托给自己的父加载器,每一层的类加
    载器都是如此,因此所有的类加载请求最终都应该传送到顶层
    Bootstrap ClassLoader中,只有当父加载器反馈自己无法完成加载
    请求时,子加载器才会尝试自己加载。

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

    热修复可以利用BaseDexClassLoader中的pathList对象,pathList中
    包含一个DexFile的集合dexElements,我们可以在这个dexElements
    中去做一些事情,比如在这个数组的第一个元素放置我们的
    patch.jar,里面包含修复过的类。这样的话,当遍历findClass的时
    候,我们修复的类就会被查找到,由于双亲委托机制,先加载到修复过的类后,就不会加载有bug的类

    相关文章

      网友评论

        本文标题:Android中的classLoader

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