Android类加载ClassLoader双亲委托机制详解
一、ClassLoader类图关系
ClassLoader、BootClassLoader、BaseDexClassLoader等之间关系,如下如:

二、双亲委托机制
1、定义
如果某个类加载器在加载类时,先不会自己去尝试加载这个类,而是首将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务或者没有父类加载器时,才会交给自己尝试加载。
如:可以看到创建 ClassLoader 需要接收一个 ClassLoader parent 参数。这个 parent 的目的就在于实现类加载的双亲委托
protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
// First, check if the class has already been loaded
// 检查class是否有被加载
Class<?> c = findLoadedClass(name);
if (c == null) {
try {
if (parent != null) {
//如果parent不为null,则调用parent的loadClass进行加载
c = parent.loadClass(name, false);
} else {
//parent为null,则调用BootClassLoader进行加载
c = findBootstrapClassOrNull(name);
}
} catch (ClassNotFoundException e) {
// ClassNotFoundException thrown if class not found
// from the non-null parent class loader
}
if (c == null) {
// If still not found, then invoke findClass in order
// to find the class.
// 如果都找不到就自己查找
c = findClass(name);
}
}
return c;
}2、双亲作用
1)、避免重复加载,当父加载器已经加载了该类的时候,就没有必要子ClassLoader再加载一次。
2)、安全性考虑,防止核心API库被随意篡改。
以上就是Android类加载ClassLoader的详细内容,更多关于Android类加载ClassLoader的资料请关注脚本之家其它相关文章!
相关文章
Android实现界面内嵌多种卡片视图(ViewPager、RadioGroup)
这篇文章主要为大家详细介绍了Android实现界面内嵌多种卡片视图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-09-09
android中DatePicker和TimePicker的使用方法详解
这篇文章主要介绍了android中DatePicker和TimePicker的使用方法,是Android中常用的功能,需要的朋友可以参考下2014-07-07
Android自定义带增长动画和点击弹窗提示效果的柱状图DEMO
这篇文章主要介绍了Android自定义带增长动画和点击弹窗提示效果的柱状图的相关资料,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下2016-11-11


最新评论