Android类加载ClassLoader

手机游戏开发者 2024-10-1 19:47:44 58 0 来自 中国
一、ClassLoader类图关系

ClassLoader、BootClassLoader、BaseDexClassLoader等之间关系,如下如:

1.jpg 二、双亲委托机制

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库被随意窜改。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-21 19:50, Processed in 0.189580 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表