Android ClassLoader
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的类。
更多相关文章
- H5案例分享:使用JS判断客户端、浏览器、操作系统类型
- Android Debug keystore系统位置
- Android系统介绍
- 如何使Android应用程序获取系统权限 来修改系统时间
- 流媒体开发之-服务器图片的加载
- Android 的窗口管理系统 (View, Canvas, WindowManager)
- Android 系统字体