/**
- 加载流程说明
**/
// 1. 传入需加载类的名字(classname)
// 2. 通过Dex文件,寻找到所需类(findClass)
// a. 按顺序遍历ClassLoader的所有Dex文件,即 集合dexElements
// b. 每遍历到1个Dex文件,则在该Dex文件中寻找所需加载的类
// c. 若在该Dex文件找到该类,则返回;若找不到,则继续遍历下1个Dex文件
// 3. 加载所需类
/**
- BaseDexClassLoader的findClass()源码分析
**/
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
// 从pathList对象对象中寻找->>分析1
Class clazz = pathList.findClass(name);
if (clazz == null) {
throw new ClassNotFoundException(name);
}
return clazz;
}
/**
- 分析1:DexPathList的findClass()源码分析
**/
public Class findClass(String name) {
// 1. 按顺序遍历ClassLoader的所有Dex文件,即 集合dexElements
for (Element element : dexElements) {
DexFile dex = element.dexFile;
// 2. 每遍历到1个Dex文件,则在该Dex文件中寻找所需加载的类 ->>分析2
if (dex != null) {
Class clazz = dex.loadClassBinaryName(name, definingContext);
// 3. 若在该Dex文件找到该类,则返回;若找不到,则继续遍历下1个Dex文件
if (clazz != null) {
return clazz;
}
}
}
return null;
}
/**
- 分析2:DexFile的loadClassBinaryName()源码分析
**/
public Class loadClassBinaryName(String name, ClassLoader loader) {
return defineClass(name, loader, mCookie);
}
/**
- 分析3:DexFile的defineClass()源码分析
**/
private native static Class defineClass(String name, ClassLoader loader, int cookie);
#####3. 热修复 原理
3.1 具体描述
把需修复、含Bug的类 独立打包到1个Dex文件中(记为:patch.dex)
将该 Dex文件 插入到ClassLoader中集合 dexElements的最前面
3.2 示意图
3.3 特别注意:CLASS_ISPREVERIFIED 标记
具体描述
解决方案具体描述
示意图
注:需完成上述步骤(防止类被打上 CLASS_ISPREVERIFIED 标记),再实现补丁
#####4. 热修复 开源库介绍
约在15年下半年开始,热补丁修复技术在 Android 圈非常火爆,热补丁方案开始大量涌现
下面,我将主要介绍当前主流的热修复开源库
4.1 主流的热修复 开源库
4.2 对比
#####5. 总结
结尾
最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。
首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)
泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶
注解原理丶注解原理丶序列化
Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等)
代码框架结构优化(数据结构丶排序算法丶设计模式)
APP性能优化(用户体验优化丶适配丶代码调优)
热修复丶热升级丶Hook技术丶IOC架构设计
NDK(c编程丶C++丶JNI丶LINUX)
如何提高开发效率?
MVC丶MVP丶MVVM
微信小程序
Hybrid
Flutter
接下来是资料清单:(敲黑板!!!)
1.数据结构和算法
2.设计模式
3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记
4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)
不论遇到什么困难,都不应该成为我们放弃的理由!共勉~
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
bbs.csdn.net/topics/618156601)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!