【每周一题】—— Android中ClassLoader

关于ClassLoader涉及到问题:

  1. Android中有哪几种ClassLoader?它们的作用和区别是什么?
  2. 简述ClassLoader的双亲委托模型
  3. 简述双亲委托模型在热修复领域的应用

Android中的ClassLoader

Android中的ClassLoader
1. BootClassLoader
2. URLClassLoader
3. BaseDexClassLoader
4. PathClassLoader
5. DexClassLoader

其中BootCLassLoader、URLClassLoader、BaseDexClassLoader是继承ClassLoader;PathClassLoader、DexClassLoader则是继承BaseDexClassLoader

BootClassLoader

Android中类默认无父构造器的时候 会默认使用PathClassLoader作为父构造器,而PathClassLoader的父构造器就是BaseDexClassLoader。
BootClassLoader是ClassLoader中的内部类,是包内可见的,没法使用,不能做动态加载

URLClassLoader

用来加载jar文件,由于dalvik虚拟机不能加载,所以Android中无法使用这个类加载器

BaseDexClassLoader

加载各种Dex中的类,其构造方法有四个参数 (String dexPath, File optimizedDirectory, String librarySearchPath, ClassLoader parent)

public BaseDexClassLoader(String dexPath, File optimizedDirectory, String librarySearchPath, ClassLoader parent) {
       throw new RuntimeException("Stub!");
} 
  1. String dexPath:类所在的DEX、jar、apk的路径
  2. File optimizedDirectory:由于dex文件在jar或者apk文件中,因此需要从apk或者jar文件中解压出dex文件,这个参数就是制定解压dex文件后存放的位置
  3. String librarySearchPath:目标类使用的C/C++库所在的路径
  4. ClassLoader parent:该构造器的父构造器,一般为执行类的构造器
PathClassLoader

是BaseDexClassLoader的子类,参数optimizedDirectory默认为空,其实默认路径是/data/dalvik-cache目录

DexClassLoader

是BaseDexClassLoader的子类,支持加载包含classes.dex的jar、apk文件,可以是SD卡上的路径
一般来说dalvik不能直接识别jar文件,但是DexClassesLoader却支持jar文件,其实是BaseDexClassLoader对”.jar”,”.zip”,”.apk”,”.dex”后缀文件最后都会生成一个对应的dex文件;而URLClassLoader不是类似的操作,一般用DexClassLoader来作为动态加载的加载器

简述ClassLoader的双亲委托模型

当一个类加载器收到类加载的请求时,刚开始自身是不处理的,而是交给父类加载器,每个层次都是这样,直到传递到最父类加载器BootClassLoader,父加载器不能完成才会传给子类加载器。

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

当应用中有几个类有bug了,修复之后将这些包打包成补丁文件,这些类生成的dex文件会封装成Element对象并且插到dexElementsList的最前端去,这样当dexClassLoader加载类的时候,会优先找到修复的类,有bug的类会在后面,根据双亲委托模型并不会执行到,已达到一个热修复的作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值