原创 Android窗口管理服務WindowManagerService對輸入法窗口(Input Method Window)的管理分析

       在Android系統中,輸入法窗口是一種特殊類型的窗口,它總是位於需要使用輸入法的窗口的上面。也就是說,一旦WindowManagerService服務檢測到焦點窗口需要使用輸入法,那麼它就會調整輸入法窗口在窗口堆棧中的位置

原创 Android應用程序窗口(Activity)的視圖對象(View)的創建過程分析

     從前文可知道,每一個Activity組件都有一個關聯的Window對象,用來描述一個應用程序窗口。每一個應用程序窗口內部又包含有一個View對象,用來描述應用程序窗口的視圖。應用程序窗口視圖是真正用來實現UI內容和佈局的,也就是

原创 Android幀緩衝區(Frame Buffer)硬件抽象層(HAL)模塊Gralloc的實現原理分析(9)

         5. 圖形緩衝區的釋放過程         前面提到,用戶空間的應用程序用到的圖形緩衝區是由Gralloc模塊中的函數gralloc_free來釋放的,這個函數實現在文件hardware/libhardware/modul

原创 Android幀緩衝區(Frame Buffer)硬件抽象層(HAL)模塊Gralloc的實現原理分析(11)

         爲了完整性起見,最後我們再簡要分析函數gralloc_lock和gralloc_unlock的實現,以便可以瞭解一個圖形緩衝區的鎖定和解鎖操作是如何實現的。         函數gralloc_lock實現在文件hardw

原创 Android應用程序窗口(Activity)的繪圖表面(Surface)的創建過程分析

       在前文中,我們分析了應用程序窗口連接到WindowManagerService服務的過程。在這個過程中,WindowManagerService服務會爲應用程序窗口創建過一個到SurfaceFlinger服務的連接。有了這個

原创 Android應用程序窗口(Activity)的運行上下文環境(Context)的創建過程分析

       在前文中,我們簡要介紹了Android應用程序窗口的框架。Android應用程序窗口在運行的過程中,需要訪問一些特定的資源或者類。這些特定的資源或者類構成了Android應用程序的運行上下文環境,Android應用程序窗口可

原创 Android應用程序窗口(Activity)的測量(Measure)、佈局(Layout)和繪製(Draw)過程分析(上)

       在前面一篇文章中,我們分析了Android應用程序窗口的繪圖表面的創建過程。Android應用程序窗口的繪圖表面在創建完成之後,我們就可以從上到下地繪製它裏面的各個視圖了,即各個UI元素了。不過在繪製這些UI元素之前,我們還

原创 Android應用程序與SurfaceFlinger服務的連接過程分析

         前文在描述Android應用程序和SurfaceFlinger服務的關係時提到,每一個有UI的Android應用程序都需要與SurfaceFlinger服務建立一個連接,以便可以通過這個連接來請求SurfaceFlinge

原创 Android幀緩衝區(Frame Buffer)硬件抽象層(HAL)模塊Gralloc的實現原理分析(10)

        7. 圖形緩衝區的註銷過程        圖形緩衝區使用完成之後,就需要從當前進程中註銷。前面提到,註銷圖形緩衝區是由Gralloc模塊中的函數gralloc_unregister_buffer來實現的,這個函數實現在文件h

原创 Android窗口管理服務WindowManagerService的簡要介紹和學習計劃

       在前一個系列文章中,我們從個體的角度來分析了Android應用程序窗口的實現框架。事實上,如果我們從整體的角度來看,Android應用程序窗口的實現要更復雜,因爲它們的類型和作用不同,且會相互影響。在Android系統中,對

原创 Android應用程序資源的查找過程分析

       我們知道,在Android系統中,每一個應用程序一般都會配置很多資源,用來適配不同密度、大小和方向的屏幕,以及適配不同的國家、地區和語言等等。這些資源是在應用程序運行時自動根據設備的當前配置信息進行適配的。這也就是說,給定一

原创 Android視圖SurfaceView的實現原理分析

       在Android系統中,有一種特殊的視圖,稱爲SurfaceView,它擁有獨立的繪圖表面,即它不與其宿主窗口共享同一個繪圖表面。由於擁有獨立的繪圖表面,因此SurfaceView的UI就可以在一個獨立的線程中進行行繪製。又

原创 Dalvik虛擬機的啓動過程分析

       在Android系統中,應用程序進程都是由Zygote進程孵化出來的,而Zygote進程是由Init進程啓動的。Zygote進程在啓動時會創建一個Dalvik虛擬機實例,每當它孵化一個新的應用程序進程時,都會將這個Dalvi

原创 Android控件TextView的實現原理分析

       在前面一個系列的文章中,我們以窗口爲單位,分析了WindowManagerService服務的實現。同時,在再前面一個系列的文章中,我們又分析了窗口的組成。簡單來說,窗口就是由一系列的視圖按照一定的佈局組織起來的。實際上,每

原创 Dalvik虛擬機JNI方法的註冊過程分析

       在前面一文中,我們分析了Dalvik虛擬機的運行過程。從中可以知道,Dalvik虛擬機在調用一個成員函數的時候,如果發現該成員函數是一個JNI方法,那麼就會直接跳到它的地址去執行。也就是說,JNI方法是直接在本地操作系統上執