# Android GDI基本框架
在Android中所涉及的概念和代碼最多,最繁雜的就是GDI相關的代碼了。但是本質從抽象上來講,這么多的代碼和框架就干了一件事情:對顯示緩沖區的操作和管理。
GDI主要管理圖形圖像的輸出,從整體方向上來看,GDI可以被認為是一個物理屏幕使用的管理器。因為在實際的產品中,我們需要在物理屏幕上輸出不同的窗口,而每個窗口認為自己獨占屏幕的使用,對所有窗口輸出,應用程序不會關心物理屏幕是否被別的窗口占用,而只是關心自己在本窗口的輸出,至于輸出是否能在屏幕上看見,則需要GDI來管理。
[](http://hi.csdn.net/attachment/201006/13/0_127644050310jf.gif)
從最上層到最底層的數據流的分析可以看到實際上GDI在上層為GUI提供一個抽象的概念,就好像操作系統中的文件系統所提供文件,目錄等抽象概念一樣,GDI輸出抽象成了文本,畫筆,位圖操作等設備無關的操作,讓應用程序員只需要面對邏輯的設備上下文進行輸出操作,而不要涉及到具體輸出設備,以及輸出邊界的管理。GDI負責將文本、線條、位圖等概念對象映射到具體的物理設備,所以GDI的在大體方向上可以分為以下幾大要素:
畫布
字體
文本輸出
繪畫對象
位圖輸出
Android的GDI系統
Android的GDI系統所涉及到概念太多,加之使用了OpenGL使得Android的層次和代碼很繁雜。但是我們對于Android的GDI系統需要了解的方面不是他的靜態的代碼關系,而是動態的對象關系,在邏輯運行的架構上理解GDI。我們首先還是需要從代碼結構開始我們的理解。
Frameworks/Libs/Surfaceflinger
Frameworks/base/core/jni/android_view_Surface.cpp
Frameworks/base/core/java/android/view/surface.java
Frameworks/base/Graphics:繪圖接口
Frameworks/Libs/Ui
External/Skia
其中External/Skia是一個C++的2D圖形引擎庫,Android的2D繪制系統都是建立在該基礎之上.Skia完成了:文本輸出,位圖,點,線,圖像解碼等功能。
我在這里給出Android GDI的基本框架示意圖。
[](http://hi.csdn.net/attachment/201006/13/0_1276440506aSNE.gif)
對于上面的GDI架構圖我們只是一個大概的了解,我們有太多的問題需要解決,有太多的疑問需要得到答案,我就一直在想,為什么設計者有提出如此眾多的概念,這個概念的背景是什么?他要管理什么,他要抽象什么?從前面知道,Android的整個設計理念就是無邊界化,他是如何穿透Linux進程這個鴻溝來達到無邊界的?Surface,Canvas, Layer,LayerBase, NativeBuffer,SurfaceFlinger,SurfaceFlingerClient這些到底是一個什么東西?如何管理,傳遞的是什么?創建的是什么?這些都是抽象的概念,繪畫的終極的緩沖區到底是如何管理的?緩沖區到底在哪里?
我們還是看看做終極的,最本質的設計概念,在從這些概念出發,來探討這些概念的形成過程,是否有必要去生成寫概念。SurfaceFlinger本質上干什么的?SurfaceFlinger的確就是這個意義:應用程序通過SurfaceFlinger將自己的“Surface”投擲到屏幕緩沖區。至于如何投擲的,我們將會在后面詳細描述。
- 前言
- (一)分析方法論探討之設計意圖
- (二)方法論探討之概念空間篇
- (三)手機之硬件形態
- (四)手機的軟件形態
- (五)基本空間劃分
- (六)IPC框架分析 Binder,Service,Service manager
- (七)Service深入分析
- (八)Android 啟動過程詳解
- (九)Zygote Service
- (十)Android GWES之基本原理篇
- (十一)Android GWES之消息系統
- (十二)Android GEWS窗口管理之基本架構原理
- (十三)Android GWES之Android窗口管理
- (十四)Android GWES之輸入系統
- (十五)Android輸入系統之輸入路徑詳解
- (十六)Android電話系統-概述篇
- (十七)電話系統之rilD
- (十八)Android電話系統之RIL-Java
- (十九)電話系統之GSMCallTacker
- (二十)Android應用程序框架之無邊界設計意圖
- (二十一)Android應用框架之AndroidApplication
- (二十二)Android應用框架之Activity
- (二十三)Andoird GDI之基本原理及其總體框架
- (二十四)Android GDI之顯示緩沖管理
- (二十五)Android GDI之共享緩沖區機制
- (二十六)Android GDI之SurfaceFlinger
- (二十七)Android GDI 之SurfaceFlinger之動態結構示意圖
- (二十八)Android GDI之Surface&Canvas