Android系統(tǒng)架構(gòu)
http://www.itdecent.cn/p/fd3a36abc886
系統(tǒng)啟動過程
系統(tǒng)引導(dǎo)程序加載啟動linux內(nèi)核,內(nèi)核中有數(shù)據(jù)結(jié)構(gòu)和驅(qū)動程序,讀取init.c,執(zhí)行一些初始化的bin命令,執(zhí)行app_process.main,啟動Zygote進(jìn)程;Zygote preloadClass完成android環(huán)境的初始化,并startSystemServer,啟動server進(jìn)程,完成服務(wù)注冊;調(diào)用Ams.systemReady,并調(diào)用ActivityStack的resumeTopActivity,里面會判斷next有沒有,沒有就startHomeActivity。
https://www.cnblogs.com/tiantianbyconan/p/5013863.html
http://www.itdecent.cn/p/9cbf147da660
java本地內(nèi)存和主存
根據(jù)JMM的設(shè)計,系統(tǒng)存在一個主內(nèi)存(Main Memory),Java中所有變量都儲存在主存中,對于所有線程都是共享的。每條線程都有自己的工作內(nèi)存(Working Memory),工作內(nèi)存中保存的是主存中某些變量的拷貝,線程對所有變量的操作都是在工作內(nèi)存中進(jìn)行,線程之間無法相互直接訪問,變量傳遞均需要通過主存完成。
java內(nèi)存模型
http://www.itdecent.cn/p/9e02547b0873
java提供finalize()方法,垃圾回收器準(zhǔn)備釋放內(nèi)存的時候,會先調(diào)用finalize()
并發(fā)三大特性
http://www.itdecent.cn/p/cf57726e77f2
volatile和synchronized區(qū)別
http://blog.csdn.net/suifeng3051/article/details/52611233
http://blog.csdn.net/guyuealian/article/details/52525724
java內(nèi)存模型
http://blog.csdn.net/suifeng3051/article/details/52611310
https://www.cnblogs.com/lewis0077/p/5143268.html
GC
http://www.itdecent.cn/p/4eb06375976c
http://www.itdecent.cn/p/1d7f424cf91e
MinorGc清理年輕代;
Major GC清理年老區(qū)(Tenured space).
Full GC清理整個內(nèi)存堆 – 既包括年輕代也包括年老代
jvm原理
http://www.importnew.com/17770.html
http://blog.csdn.net/houliang120/article/details/50958212
Handler的IdleHandler
http://blog.csdn.net/anseven/article/details/40975851
bsdiff算法
https://cloud.tencent.com/developer/article/1008518
BSDiff算法的提出即針對可執(zhí)行文件更新前后二階變動的兩個重要規(guī)律:1)沒有被更新代碼所影響的代碼段,在變?yōu)榭蓤?zhí)行文件后,該區(qū)域的二進(jìn)制內(nèi)容的改變是極為稀疏的,即僅僅有部分指針或寄存器地址會變動,通常不會超過一兩個字節(jié);2)更新后的代碼和數(shù)據(jù)會有很大的位置變動,但這種變動大多為整塊的移動,即某一塊位置中代碼內(nèi)的指針地址變動均會有相同的位移值
基于此思想,BSDiff算法使用如下步驟來進(jìn)行生成差異更新包:
1. 將舊文件二進(jìn)制使用后綴排序或哈希算法形成一個字符串索引。
2. 使用該字符串索引對比新文件,生成差異文件(difference file)和新增文件(extra file)。
3. 將差異文件和新增文件及必要的索引控制信息壓縮為差異更新包。
dexdiff
http://www.itdecent.cn/p/8267373e1f1e
Step1:計算出new dex中每項Section的大小,比如string_ids在dex文件中所占大小。
step2:根據(jù)表中前一項的偏移地址和大小,計算出每項Section的偏移地址。
this.patchedStringIdsOffset = patchedHeaderOffset + patchedheaderSize;
step3:調(diào)用DexSectionDiffAlgorithm.execute(),將new dex與old dex中的每項section進(jìn)行對比,對于每項Section,遍歷其每一項Item,進(jìn)行新舊對比,記錄ADD,DEL標(biāo)識,存放于patchOperationList中。接著遍歷patchOperationList,添加REPLACE標(biāo)識,最后將ADD,DEL,REPLACE操作分別記錄到各自的List中。
step4:調(diào)用DexPatchGenerator.writePatchOperations(),將記錄寫入補丁。
dex和加固
http://mp.weixin.qq.com/s/UKySMpPe1O4sa-wnadPAyg
ContentProvider初始化和啟動
http://blog.csdn.net/zhenjie_chang/article/details/62889188
http://blog.csdn.net/wangbaochu/article/details/52042926
Contextprovider在ActivityThread.main時調(diào)用Ams的attachApplication通過Pms獲取所有manifest中的contentprovider,發(fā)送到activityThread.h調(diào)用installProvider,通過LoadedApk反射生成Contentprovider
本進(jìn)程內(nèi)的ContentProvider一般是在進(jìn)程啟動的時候就啟動并創(chuàng)建的。在Activity的啟動過程中分析過新進(jìn)程的啟動過程。
1.?創(chuàng)建一個新的進(jìn)程。調(diào)用ActivityThread的main方法
2.?調(diào)用ActivityThread的attach方法
3.?調(diào)用ActivityManagerService的attachApplication方法,通知新的進(jìn)程創(chuàng)建完成,根據(jù)新創(chuàng)建的進(jìn)程初始化ProcessRecord的信息。然后查詢所有和本進(jìn)程相關(guān)的ContentProvider信息。
4.?調(diào)用新建進(jìn)程的bindApplication方法,通知新進(jìn)程安裝并啟動這些ContentProvider
Receiver注冊和發(fā)送
http://blog.csdn.net/joneren/article/details/72556751
http://blog.csdn.net/angel1hao/article/details/51955953
http://www.itdecent.cn/p/17ed7bfeed13
apk打包過程
http://www.itdecent.cn/p/7c288a17cda8
http://www.itdecent.cn/p/a134d00e81ab
dvm和jvm
http://www.itdecent.cn/p/038807ec68c3
http://www.itdecent.cn/p/e8781933658d
Gc
http://www.itdecent.cn/p/3c7678246f90
http://blog.csdn.net/langxianwenye/article/details/40895267
http://blog.csdn.net/hello2mao/article/details/42361755
http://android.jobbole.com/81209/

Concurrent mark sweep----全部對象的檢測回收
Concurrent partial mark sweep----部分的檢測回收
Concurrent sticky mark sweep----僅檢測上次回收后創(chuàng)
建的對象,速度快,卡頓少,比較頻繁
SparseArray+ArrayMap
http://www.itdecent.cn/p/86b1fb6f9601
兩個數(shù)組Key和Value;二分查找法查詢數(shù)組插入位置,如果是容量夠的話就插入,如果容量不夠以2倍擴容,delete時候會將value置Delete,gc會進(jìn)行回收;
http://www.itdecent.cn/p/6a6a8256306b
兩個數(shù)組Hash,Key和Value;二分查找法通過Hash(key)判斷位置;


斷點續(xù)傳
http://blog.csdn.net/inconsolabl/article/details/48085903
http://www.itdecent.cn/p/5b2e22c42467


java動態(tài)代理機制
http://www.itdecent.cn/p/7fb4b469acd6


Toast要優(yōu)雅
http://www.itdecent.cn/p/364117750619
http://mp.weixin.qq.com/s/l62PtbmrIOkVKfJ2r0JwEw
http://blog.csdn.net/dj0379/article/details/51589403
hook原理
http://www.itdecent.cn/p/b30ea19c444b
http://www.itdecent.cn/p/8632fdc86009
http://www.itdecent.cn/p/36a2924e5d97
equal寫法
http://www.itdecent.cn/p/787775ea4899
動畫原理
http://blog.csdn.net/lmj623565791/article/details/42056859
Mvp,Mvc,Mvvm
http://www.itdecent.cn/p/b9549aa0e1fe
View#post與Handler#post的區(qū)別,以及導(dǎo)致的內(nèi)存泄漏分析
http://wwangc.me/post/android-view-post-ml.html/
LayoutInflater解析
http://wwangc.me/post/android-layout-inflate.html/

圖形顯示系統(tǒng)
http://wwangc.me/post/android-gui-1.html/
過度繪制
http://wwangc.me/post/android-overdraw.html/
插件原理
http://wwangc.me/post/android-plugins-dev.html/
VirtualApk滴滴是因為插件在某些方面與主工程數(shù)據(jù)耦合,而在滴滴打車中,其他業(yè)務(wù)模塊均需要宿主提供的訂單、定位、賬號等數(shù)據(jù),因此插件不可能和宿主沒有交互;
DroidPlugin是為了插件和主工程不存在耦合。
Https原理
http://wwangc.me/post/network-https.html/#more
http://www.itdecent.cn/p/6bc0646588fe
http://www.itdecent.cn/p/55a5c3bd1a0e
https://www.zhihu.com/question/25912483
http://wetest.qq.com/lab/view/110.html




容器比較
http://www.itdecent.cn/p/d562638071d1
http://www.itdecent.cn/p/da62adf81b49
String\StringBuilder\StringBuffer
http://www.itdecent.cn/p/f3b1e9e717ca
deep clone
http://blog.csdn.net/zhangjg_blog/article/details/18369201/
不可變對象
https://www.cnblogs.com/jaylon/p/5721571.html
Activity層級
http://www.itdecent.cn/p/a8850e7cbac2

class的范型講解:
getSuperclass ? 返回直接繼承的父類(由于編譯擦除,沒有顯示泛型參數(shù))
getGenericSuperclass ?返回直接繼承的父類(包含泛型參數(shù))
//參數(shù)化類型??
????????????ParameterizedType?parameterizedType=?(ParameterizedType)?genericSuperclass;??
//返回表示此類型實際類型參數(shù)的?Type?對象的數(shù)組??
????????????Type[]?actualTypeArguments?=?parameterizedType.getActualTypeArguments();??
this.clazz=?(Class)actualTypeArguments[0];?
Future\FutureTask\Callable
http://blog.csdn.net/javazejian/article/details/50896505
