Android類加載

雙親委托

某個(gè)類加載時(shí),首先委托給parent加載,依次遞歸,如果parent可以拿到對(duì)象則返回,否則由子類獲取

優(yōu)點(diǎn)
  1. 避免重復(fù)加載
  2. 安全考慮,防止核心API被修改
    protected Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException
    {
            // First, check if the class has already been loaded
            Class<?> c = findLoadedClass(name);
            if (c == null) {
                try {
                    if (parent != null) {
                        c = parent.loadClass(name, false);
                    } else {
                        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;
    }

熱修復(fù)

類加載是有先后順序,
首先獲取到當(dāng)前應(yīng)用PathClassLoader,通過反射獲取到DexPathList的pathList;修改pathList中的dexElements,

  1. 把補(bǔ)丁包patch.dex轉(zhuǎn)化為Element[] patch
  2. 獲取到dexElement對(duì)象屬性
  3. patch+Dexelement合并,并反射賦值給dexElements


    image.png
image.png
AndFix

反射 類加載


image.png

參考:https://www.bilibili.com/video/BV1tS4y1r7qe/?spm_id_from=333.880.my_history.page.click&vd_source=5e4ad34e631c98068c626ad8a062e008

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android的ClassLoader與java的ClassLoader有些差異, 雙親委托機(jī)制某個(gè)類加載器在加載...
    田_19ab閱讀 392評(píng)論 0 0
  • 雙親委托機(jī)制 類在進(jìn)行類加載的時(shí)候,把加載任務(wù)托管給父類加載器,如能加載成功,則返回,否則依次向子類加載器遞歸嘗試...
    森嶼暖茶閱讀 472評(píng)論 0 1
  • 安卓虛擬機(jī) Dalvik:Dalvik是Google公司用于android平臺(tái)的java虛擬機(jī)。支持已轉(zhuǎn)化為.de...
    remax1閱讀 812評(píng)論 0 6
  • 本文要講的就是 Android 中的 ClassLoader(類加載器)。要講 Android 中的 ClassL...
    JackDaddy閱讀 455評(píng)論 0 2
  • 當(dāng)我們開發(fā)完一個(gè)APP,打包成了apk裝進(jìn)了手機(jī),然后啟動(dòng)和使用APP,這一個(gè)過程中,必定會(huì)使用各種的類和方法,有...
    超人TIGA閱讀 509評(píng)論 0 1

友情鏈接更多精彩內(nèi)容