動態加載問題

默認狀況下,一個類加載後,在第一次建立實例對象時 會用它的 classloader 嘗試加載其餘所依賴的類(成員變量),若是這個時機依賴的類加載失敗,那麼建立實例失敗,等到第二次、第三次..第 n 次建立實例時,會直接失敗,不會從新嘗試用其 classloader 加載其餘所依賴的類:對象

輸入圖片說明

1,類之間的依賴(好比繼承)沒有問題;A —> B ,加載 A 會先加載Block,若是加載 A 失敗,下次加載 A 仍然會先加載 B繼承

2,控件(類的實例)之間的使用關係: a —> b: 要保證 B 先比 A 下載: a —> b && b —> a : 實例化 A 或者 B 時,A 和 B 都要存在 若是不知足以上條件,下載完成後下次啓動才能實例化成功;圖片

( '—>' 標識依賴,好比類的繼承、實例之間的引用;小寫字母表明實例,大寫字母標識類)ssl

解決方法: 控件之間有使用關係時, 使用反射方式使用,而不是直接使用it

(直接使用會用類的默認加載模式,第一次加載失敗的類(好比 SimpleVew2),之後每次遇到會直接失敗,而再也不嘗試用其 class loader(這裏是 SimpleView3的 loader)加載)class

輸入圖片說明

相關文章
相關標籤/搜索