Android ClassLoader_第1张图片


J


Java的类加载器一般为URLClassLoader,在Android里是不能用的,取而代之的是DexClassLoader和PathClassLoader。


Android 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。


系统提供的类加载器主要有下面三个:

1,引导类加载器(java.lang.BootClassLoader instance):它用来加载 Java 的核心库,是由虚拟机提供的,并不继承自 java.lang.ClassLoader。

2,系统类加载器(dalvik.system.PathClassLoader instance):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类.

在 android中,它的DexPathList 默认是 ".", 即启动 dalvik vm的目录,

nativeLibraryDirectories 是 [/vendor/lib , /system/lib];可以通过 ClassLoader.getSystemClassLoader()来获取它。

3,应用类加载器(dalvik.system.PathClassLoaderinstance):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。它的 DexPathList 是 "/data/app/your_package_file_name.apk",

nativeLibraryDirectories 则为[/data/app-lib/your_package_file_name, /vendor/lib, /system/lib]”

如果在一个 Activity 中执行如下代码:

this.getClassLoader()//或者任何一个普通POJO比如param,执行://param.getClass().getClassLoader()

都会得到类似如下的结果:

result={[email protected]}"dalvik.system.PathClassLoader[DexPathList[[zipfile"/data/app/com.zzw.october.debug-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.zzw.october.debug-1,/vendor/lib,/system/lib]]]"pathList={[email protected]}"DexPathList[[zipfile"/data/app/com.zzw.october.debug-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.zzw.october.debug-1,/vendor/lib,/system/lib]]”parent={[email protected]}



Java 应用开发人员编写和使用的则主要是 DexClassLoader 以及其他继承至ClassLoader的类。


更多相关文章

  1. H5案例分享:使用JS判断客户端、浏览器、操作系统类型
  2. Android Debug keystore系统位置
  3. Android系统介绍
  4. 如何使Android应用程序获取系统权限 来修改系统时间
  5. 流媒体开发之-服务器图片的加载
  6. Android 的窗口管理系统 (View, Canvas, WindowManager)
  7. Android 系统字体

随机推荐

  1. Android 更新API详细
  2. android webview 学习
  3. Android 之多点触摸 手势拉伸放大缩小图
  4. android 圆形头像—— android开源系列:Ci
  5. Android Android.mk && Application总结
  6. Error in an XML file: aborting build.
  7. Android:开发中遇到的异常Error解析
  8. Android 中如何处理双击事件
  9. Html、Flex、Android、JavaGUI、IOS前端
  10. android报错——The import android.util