Android ClassLoader


Jjava


Java的類加載器通常爲URLClassLoader,在Android裏是不能用的,取而代之的是DexClassLoader和PathClassLoader。android


Android 中的類加載器大體能夠分紅兩類,一類是系統提供的,另一類則是由 Java 應用開發人員編寫的。app


系統提供的類加載器主要有下面三個:this

1,引導類加載器(java.lang.BootClassLoader instance):它用來加載 Java 的核心庫,是由虛擬機提供的,並不繼承自 java.lang.ClassLoader。spa

2,系統類加載器(dalvik.system.PathClassLoader instance):它用來加載 Java 的擴展庫。Java 虛擬機的實現會提供一個擴展庫目錄。該類加載器在此目錄裏面查找並加載 Java 類. debug

在 android中,它的DexPathList 默認是 ".", 即啓動 dalvik  vm的目錄, code

nativeLibraryDirectories 是 [/vendor/lib , /system/lib]; 能夠經過 ClassLoader.getSystemClassLoader()來獲取它。繼承

3,應用類加載器(dalvik.system.PathClassLoader instance):它根據 Java 應用的類路徑(CLASSPATH)來加載 Java 類。通常來講,Java 應用的類都是由它來完成加載的。它的 DexPathList 是 "/data/app/your_package_file_name.apk", ip

nativeLibraryDirectories 則爲 [/data/app-lib/your_package_file_name, /vendor/lib, /system/lib]」開發

若是在一個 Activity 中執行以下代碼:

this.getClassLoader()

//或者 任何一個普通 POJO 好比 param ,執行:
//param.getClass().getClassLoader()

都會獲得相似以下的結果:

result = {dalvik.system.PathClassLoader@5453543} "dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.zzw.october.debug-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.zzw.october.debug-1, /vendor/lib, /system/lib]]]"
pathList = {dalvik.system.DexPathList@4324325} "DexPathList[[zip file "/data/app/com.zzw.october.debug-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.zzw.october.debug-1, /vendor/lib, /system/lib]]」
parent= {java.lang.BootClassLoader@6745984}



Java 應用開發人員編寫和使用的則主要是 DexClassLoader 以及其餘繼承至ClassLoader的類。

相關文章
相關標籤/搜索