Android類加載ClassLoader雙親委托機制詳解
一、ClassLoader類圖關(guān)系
ClassLoader、BootClassLoader、BaseDexClassLoader等之間關(guān)系,如下如:
二、雙親委托機制
1、定義
如果某個類加載器在加載類時,先不會自己去嘗試加載這個類,而是首將加載任務(wù)委托給父類加載器,依次遞歸,如果父類加載器可以完成類加載任務(wù),就成功返回;只有父類加載器無法完成此加載任務(wù)或者沒有父類加載器時,才會交給自己嘗試加載。
如:可以看到創(chuàng)建 ClassLoader 需要接收一個 ClassLoader parent 參數(shù)。這個 parent 的目的就在于實現(xiàn)類加載的雙親委托
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { // First, check if the class has already been loaded // 檢查class是否有被加載 Class<?> c = findLoadedClass(name); if (c == null) { try { if (parent != null) { //如果parent不為null,則調(diào)用parent的loadClass進行加載 c = parent.loadClass(name, false); } else { //parent為null,則調(diào)用BootClassLoader進行加載 c = findBootstrapClassOrNull(name); } } catch (ClassNotFoundException e) { // ClassNotFoundException thrown if class not found // from the non-null parent class loader } if (c == null) { // If still not found, then invoke findClass in order // to find the class. // 如果都找不到就自己查找 c = findClass(name); } } return c; }
2、雙親作用
1)、避免重復(fù)加載,當(dāng)父加載器已經(jīng)加載了該類的時候,就沒有必要子ClassLoader再加載一次。
2)、安全性考慮,防止核心API庫被隨意篡改。
以上就是Android類加載ClassLoader的詳細(xì)內(nèi)容,更多關(guān)于Android類加載ClassLoader的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android開發(fā)之日歷CalendarView用法示例
這篇文章主要介紹了Android開發(fā)之日歷CalendarView用法,簡單分析了日歷CalendarView組件的功能、屬性設(shè)置方法、界面布局、事件監(jiān)聽等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03Android PowerManagerService省電模式策略控制
這篇文章主要介紹了Android PowerManagerService省電模式策略控制,本文基于前兩篇文章的基礎(chǔ)介紹展開詳情,感興趣的小伙伴可以參考一下2022-08-08Android創(chuàng)建與解析XML(二)——詳解Dom方式
本篇文章主要介紹了Android創(chuàng)建與解析XML(二)——詳解Dom方式 ,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-11-11Android開發(fā)之拖動條/滑動條控件、星級評分控件功能的實例代碼
這篇文章主要介紹了Android開發(fā)之拖動條/滑動條控件、星級評分控件功能的實例代碼,需要的朋友可以參考下2019-05-05Android?Flutter實現(xiàn)在多端運行的掃雷游戲
當(dāng)我們回憶起小時候的經(jīng)典電腦游戲,掃雷一定是其中之一。本文將通過Flutter實現(xiàn)一個能在多端運行的掃雷游戲,感興趣的可以了解一下2023-03-03Android開發(fā)學(xué)習(xí)實現(xiàn)簡單計算器
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)一個簡單計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04