Android中的类加载器 - ClassLoader派生出的DexClassLoader和PathClassLoader

1. Java —— 是在JVM虚拟机 执行jar


java的可执行文件是jar文件,运行在JVM虚拟机上,JVM虚拟机通过 ClassLoader加载 jar文件,并且执行里边的代码逻辑;

2. Android —— 是在 Dalvik/ART虚拟机 执行 dex文件


  • 在程序运行时候首先把对应的类加载到内存中;
  • Android的可执行文件是 dex文件,运行在 Dalvik/ART虚拟机上,在apk文件中会有一个或多个 dex文件,而我们写的所有的代码都会被编译到这些 dex文件中,Android运行的时候就是通过执行这些 dex文件来完成应用功能的;

3. Dalvik虚拟机类加载机制


Dalvik虚拟机不能直接用ClassLoader加载 .dex文件,Android从ClassLoader派生出两个类,DexClassLoader和PathClassLoader,这两个类是我们加载 dex文件的关键,二者区别在于:

  • DexClassLoader:可以加载jar/apk/dex,可以从SD卡中加载未安装的 apk;
  • PathClassLoader:只能加载已经安装的 apk文件;

Android中的类加载源码分析可参照我下边文章:
ClassLoader类加载器源码分析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容