我這裡的GWES這個術語實際上從Microsoft 的Window上移植過來的,用GWES來表示Android的窗口事件系統不是那麼准確,在Android中Window是個弱化了的概念,更多的表現在View這個概念上。在很大程度上,Android的View的概念可以代替Microsoft Window這個概念,有點和Microsof暗中較勁的意味,你用過的概念我就偏不用,這個也是我以為的設計者意圖。
首先我們從Android的SDK外特性空間開始,在編寫Actvitiy時,我們都是面對的處理函數:OnXXXX(),例如有按鍵按下就是OnKeyDown等,在這個過程中系統做了怎樣的處理?要詳細的理解這個過程,我們就需要理解Andoid的View管理,窗口系統,消息系統和輸入系統。我們還是從最本質的地方開始,Android作為一種嵌入式的圖形用戶界面系統,它的基本原理與一般GUI的原理是相同的,同時也是遵循GWES(圖形窗口事件系統)的一般規律,總體上Android就是管理用戶輸入和系統屏幕輸出的一個系統。其實GWES這個名稱更能體現GUI的基本實質要素:圖形、窗口、事件。
GUI的實現就是對上面提到的三個基本要素的管理,根據這這三個要素的特性及其涉及的范圍,GUI在總體上可以分為三部分:
(1) 事件管理器
(2)窗口管理器:
(3)GDI
在本質上GUI就是管理用戶輸入和屏幕輸出,我們從上面的體系結構可以看到GUI的這兩大數據流的基本流向,這也決定了Android GWES設計的最基本的著眼點。
Android弱化了窗口的概念,著重使用View的概念。所以Android的基本組成可以從上面的圖修改成如下的組成:
我們要理解Android的消息系統,Looper,Handle,View等概念還是需要從消息系統的基本原理及其構造這個源頭開始。從這個源頭,我們才能很清楚的看到Android設計者設計消息系統之意圖及其設計的技術路線。
從一般的系統設計來講,一個消息循環系統的建立需要有以下幾個要素:
首先來研究一下消息驅動的基本模型,我使用如下的圖形來表示一個消息系統最基本構成:
上面的模型代表應用程序一直查詢自己的消息隊列,如果有有消息進來,應用消息處理函數中根據消息類型及其參數來作相應的處理。