Android中的class loader如上圖忘朝,class loader使用雙親委托模型嗤攻,簡單說就是當一個classloader開始加載類的時候集索,它總是讓它的parent去嘗試加載,如果失敗雌桑,那么再嘗試自己加載喇喉,這個設計的好處是帶來安全性,避免了偽造類
DexClassLoader可以指定自己的optimizedDirectory校坑,所以它可以加載外部的dex拣技,因為這個dex會被復制到內部路徑的optimizedDirectory千诬;而PathClassLoader沒有optimizedDirectory,所以它只能加載內部的dex膏斤,這些大都是存在系統(tǒng)中已經安裝過的apk里面的徐绑。
通過XXX.getClassLoader()可以知道這個class是由哪個classloader加載的
一個運行的Android應用至少有2個ClassLoader,BootClassLoader(系統(tǒng)啟動的時候創(chuàng)建的)以及PathClassLoader(應用啟動時創(chuàng)建的)
同一個Class = 相同的 ClassName + PackageName + ClassLoader掸绞,如果同一個類被不同classloader重復加載了會拋出異常