美文网首页
Android中的ClassLoader

Android中的ClassLoader

作者: 亚赛亚 | 来源:发表于2018-03-07 15:31 被阅读0次

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

BootClassLoader加载Android Framework层的字节码文件;

PathClassLoader加载已经安装到系统中的apk文件中的字节码文件;

DexClassLoader加载没有安装到系统中的apk,jar文件中的字节码文件;

在android中,ClassLoader关系如上图

BaseDexClassLoader是PathClassLoader和DexClassLoader的父类,真正实现功能的代码都在BaseDexClassLoader中

二.简述ClassLoader的双亲委托模型

当类加载器收到加载类或资源请求时,通常都是先委托给父类加载器加载,当父类加载器找不到指定类或者资源时,自身才会执行实际的类加载过程,具体加载过程如下:

1.先去判断源ClassLoader是否已加载目标类

2.再去判断父ClassLoader是否加载过目标类

3.如果都没有再去真正加载这个类,调用findClass这个方法

双亲委托模型具有共享性和隔离性,共享是指一次加载,一起使用;隔离是指父ClassLoader加载过了,子ClassLoader不会再去加载,保证不会被串改。

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

一种简单的热修复方案:假设代码中有某个类或者几个类有bug,在修复完代码之后,可以将这些类打包成一个补丁文件,通过这个补丁文件封装成一个Element对象,并且将这个Element对象插入到原dexElements数组的最前端,这样当DexClassLoader去加载类时,优先会从我们插入的这个Element中找到相应的类,虽然那个有bug的类还存在于数值中后面的Element中,但由于双亲加载机制的特点,这个有bug的类已经没有机会被加载了,这样有bug就在没有重新安装应用的情况下修复了。

相关文章

网友评论

      本文标题:Android中的ClassLoader

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