原创 ArrayList源碼
ArrayList內部由數組構成,初始容量0 private static final int DEFAULT_CAPACITY = 10; private static final Object[] EMPTY_ELEMENTD
原创 第一個gradle插件
建立插件 首先新建立一個空工程,如下圖 之後再新建一個module,Android Studio->File->New->New Module,在彈出的對話框中選擇java module 我們用groovy編寫gradle
原创 類在虛擬機中的加載流程
加載-》連接(驗證-》準備-》解析)-》初始化 1)加載:通過類的全名獲取類的二進制流,將類的數據結構轉化爲方法區的結構,在內存中生成一個代表這個類的class對象 2)連接: 驗證:確保class信息正確無害 準備:在方法區初
原创 線程池源碼
Executors Executors是concurrent包下的工具類,通過靜態方法產生各種線程池 產生固定線程數量的線程池 public static ExecutorService newFixedThreadP
原创 七層網絡模型與UDP
七層網絡模型 常用端口 FTP(文件傳輸協議): TCP 20 21 SSH(安全shell協議): TCP 22 telnet(遠程登錄協議):TCP 23 DNS(域名解析系統):UDP 53 HTTP(超文本傳輸協議
原创 kotlin內部類
內部類:默認靜態內部類,用inner修飾爲非靜態內部類 class InnerClass{ // 默認靜態 class SubClass{} // 加inner修飾變爲非靜態 inner
原创 IntentService源碼
IntentService繼承自Service,在onCreate方法中創建HandlerThread並啓動線程,利用HandlerThread在子線程中的Looper生成一個在子線程中工作的ServiceHandler Han
原创 kotlin可見性關鍵字
在kotlin文件中修飾方法,默認爲public,不能用protected private fun test1() {} internal fun test3() {} // public 爲默認 public fun test4
原创 kotlin屬性代理
屬性代理是指屬性完全被代理類來實現,var的代理類需要實現setValue和getValue,而val的代理類只需要getValue方法即可 var i:Int by IntDelegate() val j:Int by ValI
原创 ServiceManager源碼流程
ServiceManager啓動於單獨的進程,要早於zygote啓動,啓動時首先運行到service_manager.c的main函數,對binder進行初始化並進入binderloop int main(int argc, ch
原创 垃圾回收算法
判定對象爲垃圾對象的方法 引用計數法 對象每被引用一次,計數器加1,每減少一個引用,計數器減1,當計數器爲0,可視爲垃圾對象,可以被GC掉 可達性分析 從虛擬機棧,本地方法棧,方法區出發遍歷整個堆區,處於連通區的對象是不可
原创 kotlin擴展方法
擴展方法是指不改變類的源碼的情況下爲類增加自定義的方法 fun String.times(times: Int): String { var builder = StringBuilder() for (i in
原创 blockcanary源碼
blockcanary項目名稱AndroidPerformanceMonitor,內含4個模塊 1 blockcanary-android-no-op 2 blockcanary-analyzer 3 blockcanary-an
原创 SystemServer啓動流程
SystemServer被zygote啓動後會運行到main函數,在這裏面直接運行到run方法 public static void main(String[] args) { new SystemServ
原创 class,dex,Dalvik,ART
Class文件 基本信息 class文件的作用是記住類的所有信息 8位字節對齊 每個類和接口單獨佔一個class文件 缺點 內存佔用大 堆棧加載方式,加載速度慢 文件IO多,類查找慢 Dex文件 記住整個工程所有類文件信