当前位置: 首页 > news >正文

Android类加载机制

要说Android的类加载机制 ,就离不开 类加载器ClassLoader,它是一个抽象接口

下面这个图还是比较好表达了类加载流程,但如果不看我红色画的线,就会感觉有点乱,需要注意是采用的是双亲委派模式,class加载要先一层层询问是否加载过没有就传到它的上层加载,加载不到的开始往下传,是否可以加载,最后都没能加载的not found
在这里插入图片描述
上图涉及了3个类 DexClassLoader,PathClassLoader,BootClassLoader。我们看看他们的源码:
首先是DexClassLoader,下图可以看出DexClassLoader继承于BaseDexClassLoader,BaseDexClassLoader继承于ClassLoader。可以加载未安装的dex文件以及包含dex的压缩文件(apk,dex,jar,zip)
在这里插入图片描述
PathClassLoader ,下图可以看出PathClassLoader也继承于BaseDexClassLoader。通常用来加载已安装apk的dex文件。
在这里插入图片描述
而BaseClassLoader 继承于ClassLoader
在这里插入图片描述
最后是BootClassLoader,它继承于ClassLoader
在这里插入图片描述
双亲委派的作用

1.防止同一个.class文件重复加载

2.对于任意一个类确保在虚拟机中的唯一性.由加载它的类加载器和这个类的全类名一同确立其在Java虚拟机中的唯一性
3.保证.class文件不被篡改,通过委托方式可以保证系统类的加载逻辑不被app自定义的同类名来篡改.

了解这些,是我们做热修复我推荐腾讯的tinker框架tinker的github地址,插件化框架我推荐360家的和small框架。插件化并不是每个引用都适合,像淘宝京东,美团平台级别的app的有多条业务接入,他们要考虑兼容性,稳定性等,权衡利弊选择框架(市面上有多个大厂的框架了),如果我们只是很简单的app,就必要大动干戈了,不够油钱呢,美团技术团队这篇文章就讲了他们考虑的:美团插件化之路。以后有时间了再更新插件化,热修复相关的文章。通常我们在手机看到,app即使热修复了,最后还是要全量更新版本,因为一个是安装包热修复后变大,还有热修复之后的应用性能,稳定兼容性上还是不如整体包安装的应用。也包括热修复也不能保证100%的设备终端都能修复,标的都是99%等。

http://www.lryc.cn/news/135403.html

相关文章:

  • 微信小程序列表加载更多
  • 数据库知识
  • VUE 目录介绍
  • Selenium的基本使用
  • 数据结构-----树的易错点
  • 写之前的项目关于使用git remote -v 找不到项目地址的解决方案
  • STM32 F103C8T6学习笔记9:0.96寸单色OLED显示屏—自由取模显示—显示汉字与图片
  • 直播平台源码搭建协议讲解篇:传输控制协议TCP
  • 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
  • 基于Jenkins自动打包并部署Tomcat环境
  • 开利网络受邀参与御盛马术庄园发展专委会主题会议
  • 【HarmonyOS北向开发】-05 ArkTS开发语言-ArkTS开发实践
  • 无类别域间路由(Classless Inter-Domain Routing, CIDR):理解IP网络和子网划分(传统的IP地址类ABCDE:分类网络)
  • 合宙Air724UG LuatOS-Air LVGL API-概念
  • 【C语言】位段,枚举和联合体详解
  • python学习-文件管理
  • 【LeetCode 算法】Number of Ways of Cutting a Pizza 切披萨的方案数-记忆化
  • 机器视觉之光流
  • C++:list使用以及模拟实现
  • 深度学习基础知识-pytorch数据基本操作
  • Springboot使用QueryDsl实现融合数据查询
  • 解决方案 | 电子签打通消费电子行业数智化经营通路
  • JVM理论知识
  • idea - 报错 Mybatis提示Tag name expected的问题< 小于号 无法识别
  • 合宙Air724UG LuatOS-Air LVGL API--对象
  • Java将PDF文件转为Word文档
  • vite创建项目命令
  • 解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题
  • 前端加springboot实现Web Socket连接通讯以及测试流程(包括后端实现心跳检测)
  • node使用高版本的oracledb导致连接oracle的Error: NJS-138异常