Android類(lèi)加載ClassLoader雙親委托機(jī)制詳解
一、ClassLoader類(lèi)圖關(guān)系
ClassLoader、BootClassLoader、BaseDexClassLoader等之間關(guān)系,如下如:
二、雙親委托機(jī)制
1、定義
如果某個(gè)類(lèi)加載器在加載類(lèi)時(shí),先不會(huì)自己去嘗試加載這個(gè)類(lèi),而是首將加載任務(wù)委托給父類(lèi)加載器,依次遞歸,如果父類(lèi)加載器可以完成類(lèi)加載任務(wù),就成功返回;只有父類(lèi)加載器無(wú)法完成此加載任務(wù)或者沒(méi)有父類(lèi)加載器時(shí),才會(huì)交給自己嘗試加載。
如:可以看到創(chuàng)建 ClassLoader 需要接收一個(gè) ClassLoader parent 參數(shù)。這個(gè) parent 的目的就在于實(shí)現(xiàn)類(lèi)加載的雙親委托
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進(jìn)行加載 c = parent.loadClass(name, false); } else { //parent為null,則調(diào)用BootClassLoader進(jìn)行加載 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)加載了該類(lèi)的時(shí)候,就沒(méi)有必要子ClassLoader再加載一次。
2)、安全性考慮,防止核心API庫(kù)被隨意篡改。
以上就是Android類(lèi)加載ClassLoader的詳細(xì)內(nèi)容,更多關(guān)于Android類(lèi)加載ClassLoader的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android開(kāi)發(fā)之日歷CalendarView用法示例
這篇文章主要介紹了Android開(kāi)發(fā)之日歷CalendarView用法,簡(jiǎn)單分析了日歷CalendarView組件的功能、屬性設(shè)置方法、界面布局、事件監(jiān)聽(tīng)等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03Android PowerManagerService省電模式策略控制
這篇文章主要介紹了Android PowerManagerService省電模式策略控制,本文基于前兩篇文章的基礎(chǔ)介紹展開(kāi)詳情,感興趣的小伙伴可以參考一下2022-08-08Android創(chuàng)建與解析XML(二)——詳解Dom方式
本篇文章主要介紹了Android創(chuàng)建與解析XML(二)——詳解Dom方式 ,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-11-11Android獲取手機(jī)SIM卡運(yùn)營(yíng)商信息的方法
這篇文章主要介紹了Android獲取手機(jī)SIM卡運(yùn)營(yíng)商信息的方法,可獲得手機(jī)的型號(hào)、運(yùn)營(yíng)商信息及系統(tǒng)版本等,需要的朋友可以參考下2014-09-09Android開(kāi)發(fā)之拖動(dòng)條/滑動(dòng)條控件、星級(jí)評(píng)分控件功能的實(shí)例代碼
這篇文章主要介紹了Android開(kāi)發(fā)之拖動(dòng)條/滑動(dòng)條控件、星級(jí)評(píng)分控件功能的實(shí)例代碼,需要的朋友可以參考下2019-05-05Android?Flutter實(shí)現(xiàn)在多端運(yùn)行的掃雷游戲
當(dāng)我們回憶起小時(shí)候的經(jīng)典電腦游戲,掃雷一定是其中之一。本文將通過(guò)Flutter實(shí)現(xiàn)一個(gè)能在多端運(yùn)行的掃雷游戲,感興趣的可以了解一下2023-03-03Android開(kāi)發(fā)學(xué)習(xí)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04