原创 從源碼來分析ThreadLocal、Message、Handler、Looper、MessageQueue

ThreadLocal ThreadLocal是一個負責存儲數據的類,其原理是通過一個數組,存儲key-value數據,key是線程,value是存儲的數據。下面通過源碼看一下。 看源碼之前,先做個概述,這樣看源碼時思路更清晰。 1、Th

原创 ExoPlayer開發指南(官方文檔翻譯)

前言 播放視頻和音樂是Android開發中很常見的需求。 Android框架提供了MediaPlayer這個類,能夠用最少代碼實現多媒體播放。同時,Android還提供偏底層的多媒體API,比如MediaCodec、AudioTrack和

原创 Android JNI開發一:jni、ndk、so理論知識詳解

靜態庫和動態庫 靜態庫就是寫代碼時引入的lib,你在編寫代碼時會引用lib中的代碼。你的代碼編譯時,會將lib中的代碼一起編譯成二進制文件。 動態庫則是已經編譯好的二進制文件,你在編寫代碼時無法引用動態庫中的代碼,因爲它已經編譯成二進制文

原创 SurfaceView詳解和使用

雙緩衝機制 不管是什麼操作系統,都有個“圖像數據緩衝區”,存放顏色數據,每隔一段時間,把這些顏色數據投射到顯示器上,我們就看到了各種各樣的畫面。 對於應用程序來說,只需要把想要展示的內容存放到“圖像數據緩衝區”就可以了,這個操作也基本是系

原创 Android中的跨進程通信AIDL、Binder源碼詳解

AIDL AIDL是是Android Interface Definition Language的簡稱,翻譯過來就是安卓進程間通信語言。既然是一門“語言”,就有相應的“語法”。 這個AIDL“語言”嚴格來說肯定不算一門語言,它只是規定了一

原创 JVM內存分配、垃圾回收、類加載淺析

JVM內存分配 JVM將內存主要劃分爲:方法區、虛擬機棧、本地方法棧、堆、程序計數器。如下圖所示: 其中,虛擬機棧和程序計數器是每個線程獨立擁有,方法區、本地方法棧、堆是該進程內的所有線程共享。 1、程序計數器 程序計數器佔用內存空間