Android 类加载机制

Android 类加载机制

  • Android 设计基于 Java 的类加载机制,但针对 Android 特性进行了一些优化和扩展,负责将二进制数据文件(.dex 文件)加载到内存中
  • Lazy Loading 懒加载:类只有在第一次被使用时才会被加载(按需加载),而不是一次性全部加载,这样可以减少内存占用,提高程序的启动速度
  • Parent Delegation Model 双亲委派模型:通过双亲委派确保类的安全性和唯一性

ClassLoader 类加载器

  • BootClassLoader 启动类加载器:负责加载系统核心类库(比如 java.lang、android.util 和 android.app 等),使用 C++ 实现的,在 Java 中无法直接获取,不可直接访问
  • PathClassLoader:负责加载已安装 Apk 的 Dex 文件(比如 /data/app/xxx.apk 中的 classes.dex 文件)
  • DexClassLoader:负责动态加载指定路径下未安装 Apk 的 Dex 文件(是实现插件化、热修复等的关键条件)
  • Custom ClassLoader 自定义类加载器:可以继承 java.lang.ClassLoader 并重写 findClass 方法实现,通常用于加载非标准路径中的类(比如动态代理、加密文件中加载和网络下载后加载等)

双亲委派模型

  • 类加载时,先委托父加载器(比如 PathClassLoader 的父加载器是 BootClassLoader)尝试加载,若父加载器无法加载,再由自身加载
  • 不同类加载器负责不同范围的类
  • 安全性:确保核心类(比如 android.app 包)由最顶层的 BootClassLoader 加载
  • 唯一性:一个类只能由一个类加载器加载,同一个类不会被加载多次,避免重复加载,保证加载的类的唯一性
java 复制代码
//父子类加载器之间是 Composition 组合关系,而不是 Inheritance 继承关系
Custom ClassLoader -> DexClassLoader -> PathClassLoader -> BootClassLoader
相关推荐
娅娅梨3 小时前
Android- Surface, SurfaceView, TextureView, SurfaceTexture 原理图解
android·surface
2501_915918414 小时前
HTTPS 端口号详解 443 端口作用、iOS 抓包方法、常见 HTTPS 抓包工具与网络调试实践
android·网络·ios·小程序·https·uni-app·iphone
程序员码歌4 小时前
明年35岁了,如何破局?说说心里话
android·前端·后端
非门由也6 小时前
Android studio安装教程——超详细(含安装包安装教程)
android·ide·android studio
平淡风云6 小时前
Android应用添加日历提醒功能
android·日历
骐骥17 小时前
2025-09-08升级问题记录:app提示“此应用专为旧版Android打造..”或“此应用与最新版 Android 不兼容”
android·升级·不兼容·target sdk·专为旧版 android 系统
Zender Han8 小时前
Flutter 视频播放器——flick_video_player 介绍与使用
android·flutter·ios·音视频
尚久龙9 小时前
安卓学习 之 用户登录界面的简单实现
android·运维·服务器·学习·手机·android studio·安卓
Modu_MrLiu9 小时前
Android实战进阶 - 启动页
android·实战进阶·启动页·倒计时场景
出门吃三碗饭10 小时前
编译器构造:从零手写汇编与反汇编程序(一)
android·汇编