原创 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文件 記住整個工程所有類文件信