真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android類(lèi)加載模式-創(chuàng)新互聯(lián)

類(lèi)圖

 Android 類(lèi)加載模式

創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、滁州網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為滁州等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

相關(guān)類(lèi)介紹

BootClassLoader

調(diào)用流程
1、ZygoteInit的main方法
2、預(yù)加載常用類(lèi)
3、讀取預(yù)加載類(lèi)名時(shí)獲取BootClassLoader單例
4、調(diào)用classForName(C實(shí)現(xiàn))獲取結(jié)果

DexClassLoader

構(gòu)造函數(shù)
public DexClassLoader (String dexPath, String dexOutputDir, String libPath, ClassLoader parent)
optimizedDirectory是用來(lái)緩存我們需要加載的dex文件的,并創(chuàng)建一個(gè)DexFile對(duì)象,如果它為null,那么會(huì)直接使用dex文件原有的路徑來(lái)創(chuàng)建DexFile  
DexClassLoader可以指定自己的optimizedDirectory,所以它可以加載外部的dex,因?yàn)檫@個(gè)dex會(huì)被復(fù)制到內(nèi)部路徑的optimizedDirectory
注意:該加載器能夠加載未安裝的jar/apk/dex

PathClassLoader

構(gòu)造函數(shù)
public PathClassLoader (String path, String libPath, ClassLoader parent)
調(diào)用流程
1、Zygote進(jìn)程啟動(dòng)SyetemServer進(jìn)程
2、ZygoteInit的startSystemServer方法
3、Zygote進(jìn)程通過(guò)forkSystemServer方法fork自身創(chuàng)建子進(jìn)程并且調(diào)用handleSystemServerProcess
4、 工廠方法創(chuàng)建PathClassLoader
注意:該加載器只能加載系統(tǒng)中已經(jīng)安裝過(guò)的apk

SecureClassLoader和URLClassLoader

SecureClassLoader類(lèi)和JDK8中的SecureClassLoader類(lèi)的代碼是一樣的,它繼承了抽象類(lèi)ClassLoader。SecureClassLoader并不是ClassLoader的實(shí)現(xiàn)類(lèi),而是拓展了ClassLoader類(lèi)加入了權(quán)限方面的功能,加強(qiáng)了ClassLoader的安全性。
URLClassLoader類(lèi)和JDK8中的URLClassLoader類(lèi)的代碼是一樣的,它繼承自SecureClassLoader,用來(lái)通過(guò)URl路徑從jar文件和文件夾中加載類(lèi)和資源。

InMemoryDexClassLoader

InMemoryDexClassLoader是Android8.0新增的類(lèi)加載器,繼承自BaseDexClassLoader,用于加載內(nèi)存中的dex文件。

具體加載源碼

  • 從已裝載過(guò)的類(lèi)中找

  • 如果從已裝載過(guò)的列表中找不到,則從父類(lèi)裝載

  • 如果父類(lèi)找不到,從子類(lèi)裝載

    protected Class<> loadClass(String className, boolean resolve) throws ClassNotFoundException {
    Class<> clazz = findLoadedClass(className);//從已裝載過(guò)的類(lèi)中找。

        if (clazz == null) {
            ClassNotFoundException suppressed = null;
            try {
                clazz = parent.loadClass(className, false);//由父類(lèi)裝載
            } catch (ClassNotFoundException e) {
                suppressed = e;
            }
    
            if (clazz == null) {
                try {
                    clazz = findClass(className);//由子類(lèi)裝載
                } catch (ClassNotFoundException e) {
                    e.addSuppressed(suppressed);
                    throw e;
                }
            }
        }
    
        return clazz;
    }

    public Class findClass(String name, List suppressed) {
    for (Element element : dexElements) {//這里進(jìn)行遍歷查詢
    DexFile dex = element.dexFile;

            if (dex != null) {
               //從DexFile中試圖加載Class,從這里看出,從第一個(gè)開(kāi)始遍歷,如果查到就返回,這就是熱修復(fù)的基本原理。
                Class clazz = dex.loadClassBinaryName(name, definingContext, suppressed);
                if (clazz != null) {
                    return clazz;
                }
            }
        }
        //..
        return null;
    }

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


新聞名稱:Android類(lèi)加載模式-創(chuàng)新互聯(lián)
路徑分享:http://weahome.cn/article/doeogs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部