android面試時(shí)需要用到的流程圖

activity冷啟動(dòng)流程圖.png
java內(nèi)存結(jié)構(gòu).png
Okhttpclient流程圖.png

雙親委派機(jī)制流程圖.png

具體流程大概是這樣的:

1.需要加載某個(gè)類(lèi)時(shí),先檢查自定義類(lèi)加載器是否加載過(guò),如果已經(jīng)加載過(guò),則直接返回。
2.如果自定義類(lèi)加載器沒(méi)有加載過(guò),則檢查應(yīng)用程序類(lèi)加載器是否加載過(guò),如果已經(jīng)加載過(guò),則直接返回。
3.如果應(yīng)用程序類(lèi)加載器沒(méi)有加載過(guò),則檢查擴(kuò)展類(lèi)加載器是否加載過(guò),如果已經(jīng)加載過(guò),則直接返回。
4.如果擴(kuò)展類(lèi)加載器沒(méi)有加載過(guò),則檢查啟動(dòng)類(lèi)加載器是否加載過(guò),如果已經(jīng)加載過(guò),則直接返回。
5.如果啟動(dòng)類(lèi)加載器沒(méi)有加載過(guò),則判斷當(dāng)前類(lèi)加載器能否加載這個(gè)類(lèi),如果能加載,則加載該類(lèi),然后返回。
6.如果啟動(dòng)類(lèi)加載器不能加載該類(lèi),則交給擴(kuò)展類(lèi)加載器。擴(kuò)展類(lèi)加載器判斷能否加載這個(gè)類(lèi),如果能加載,則加載該類(lèi),然后返回。
7.如果擴(kuò)展類(lèi)加載器不能加載該類(lèi),則交給應(yīng)用程序類(lèi)加載器。應(yīng)用程序類(lèi)加載器判斷能否加載這個(gè)類(lèi),如果能加載,則加載該類(lèi),然后返回。
8.如果應(yīng)用程序類(lèi)加載器不能加載該類(lèi),則交給自定義類(lèi)加載器。自定義類(lèi)加載器判斷能否加載這個(gè)類(lèi),如果能加載,則加載該類(lèi),然后返回。
9.如果自定義類(lèi)加載器,也無(wú)法加載這個(gè)類(lèi),則直接拋ClassNotFoundException異常。
這樣做的好處是:

1.保證類(lèi)不會(huì)重復(fù)加載。加載類(lèi)的過(guò)程中,會(huì)向上問(wèn)一下是否加載過(guò),如果已經(jīng)加載了,則不會(huì)再加載,這樣可以保證一個(gè)類(lèi)只會(huì)被加載一次。
2.保證類(lèi)的安全性。核心的類(lèi)已經(jīng)被啟動(dòng)類(lèi)加載器加載了,后面即使有人篡改了該類(lèi),也不會(huì)再加載了,防止了一些有危害的代碼的植入。


線程池執(zhí)行流程.png

線程池執(zhí)行流程:
1.線程池初始化的時(shí)候里面是沒(méi)有線程的,工作隊(duì)列是以參數(shù)的形式傳進(jìn)來(lái)的,而且就算工作隊(duì)列里面有任務(wù)也不會(huì)馬上去執(zhí)行

2.當(dāng)調(diào)用execute() 方法添加任務(wù)時(shí)會(huì)做如下判斷

如果當(dāng)前線程數(shù)小于核心線程數(shù),則新建線程執(zhí)行任務(wù)
如果當(dāng)前線程數(shù)大于核心線程數(shù),則將任務(wù)加入工作隊(duì)列
如果工作隊(duì)列滿(mǎn)了,且當(dāng)前線程數(shù)小于最大線程數(shù),則新建線程執(zhí)行任務(wù)
如果工作隊(duì)列滿(mǎn)了,且當(dāng)前線程數(shù)大于最大線程數(shù),則執(zhí)行拒絕策略
3.當(dāng)一個(gè)線程完成任務(wù)時(shí),會(huì)從工作隊(duì)列中取一個(gè)任務(wù)來(lái)執(zhí)行

4.當(dāng)一個(gè)線程空閑時(shí),會(huì)先判斷當(dāng)前線程數(shù)大于是否大于核心線程數(shù),如果當(dāng)前線程數(shù)大于核心線程數(shù),那么此線程會(huì)在存活一定時(shí)間(keepAliveTime)后銷(xiāo)毀,最后線程池中的線程數(shù)會(huì)保持在corePoolSize的大小


apk打包流程.png

App編譯安裝流程.png

通過(guò)AAPT工具進(jìn)行資源文件(包括AndroidManifest.xml、布局文件、各種xml資源等)的打包,生成R.java文件。
通過(guò)AIDL工具處理AIDL文件,生成相應(yīng)的Java文件。
通過(guò)Javac工具編譯項(xiàng)目源碼,生成Class文件。
通過(guò)DEX工具將所有的Class文件轉(zhuǎn)換成DEX文件,該過(guò)程主要完成Java字節(jié)碼轉(zhuǎn)換成Dalvik字節(jié)碼,壓縮常量池以及清除冗余信息等工作。
通過(guò)ApkBuilder工具將資源文件、DEX文件打包生成APK文件。
利用KeyStore對(duì)生成的APK文件進(jìn)行簽名。
如果是正式版的APK,還會(huì)利用ZipAlign工具進(jìn)行對(duì)齊處理,對(duì)齊的過(guò)程就是將APK文件中所有的資源文件舉例文件的起始距離都偏移4字節(jié)的整數(shù)倍,這樣通過(guò)內(nèi)存映射訪問(wèn)APK文件 的速度會(huì)更快。


git操作文件流程.png
hashmap存儲(chǔ)過(guò)程.png

線程的6種狀態(tài)(其中運(yùn)行狀態(tài)由操作系統(tǒng)執(zhí)行,jvm不管了).png

自定義線程池時(shí)7個(gè)參數(shù)的理解.png
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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