爲何要研究Android,是由於它夠龐大,它夠複雜,他激起了我做爲一個程序員的心裏的渴望,渴望理解這種複雜性。我研究的對象是做爲手機開發平臺的Android軟件系統部分,而不是Dalvik虛擬機自己。java
做爲一個從其餘平臺裝接過來的程序員,要從事Andoid平臺系統開發,個人關於手機平臺上積累的知識已經不能知足須要了,Android爲咱們帶來了大量的新名詞,Activity,Manifest,INTENT,Service,Binder,Dalvik虛擬機,Framework,Linux,Navtive ,JNI.....。經過在源代碼,在開發社區,在開發博客,甚至在招聘過程當中,我不斷的尋求Android是什麼。通過必定時間的沉澱,我慢慢的理解到Android不單單是一類手機的總稱,不單單是一個手機開發平臺,不單單是一個虛擬java操做系統,不單單是一個開發社區,一個開發標準,不單單是一堆代碼,Android已經成了一個新的潮流。程序員
代碼多,系統複雜,縱觀社區中Android的研究者,一開始從源代碼分析Android就走向迷途,不斷的跋山涉水,向縱深衝刺,最終腦殼堆棧不夠用,迷失在開始的旅程,或者掛在半途中,鮮有通達者。我感受到大部分的研究者老是忘記站在高山上向下望一望設計者的意圖,一味的隨着代碼的控制流走入繁雜的謎團,陷入到複雜性的深淵。算法
個人研究分析是從設計者的意圖出發,從抽象的甚至從哲學的高度,從最簡單的系統原型開始,從設計猜測開始,而不是一開始就從代碼分析展開。首先理解Android大的運行框架,主幹流程,系統原型,以後再用源代碼分析充實之。固然我這裏的設計者意圖並非真正的Android設計者意圖,而是我覺得的Android設計者意圖。框架
要理解設計者意圖,就須要抽象。咱們須要在哲學意義空間中去考慮系統的描述,即系統在本質上要表達什麼。在邏輯空間上去考慮系統基本構成和動態結構。從現實到虛擬對象的映射去理解系統對象的組成,在從數據流的角度分析數據的產生者和消費者之間做用關係,從控制流的角度去分析對象之間的交互關係,從函數調用去分析具體的層次關係。函數
在系統設計上,原型是最能表達哲學空間和邏輯空間中系統本質的東西,原型是事物本質的第一層體現。我覺得任何複雜的系統都一個簡潔的系統原型,都有它簡潔的意義。系統原型是設計者意圖的第一體現,因此咱們須要從幾個方向上去提煉系統原型:spa
(1)從系統本質和基本原理出發操作系統
(2)從分析系統數據流和控制流分析出發。.net
從設計者意圖出發,得出系統原型,提取到大的邏輯結構和系統構成是第一步。以後咱們能夠從設計者的角度考慮系統猜測系統設計,爲何要這樣設計,爲何要有這些構成。這樣的基本原型是什麼?系統的限制是什麼,應用場景有哪些,有些設計的引進仍是系統收斂性而爲之呢。咱們還能夠從代碼痕跡上去分析,這些概念是如何的得來的?從必定的抽象和高度去理解這些問題,遵循系統原型出發之原則,在深刻分析代碼的時候,就不容易陷入細節中。咱們就能夠隨時跳出來想,這些代碼在總體上載表達一個什麼概念,在描繪一個什麼邏輯,他要構成一個虛擬層嗎?他是在管理這個硬件嗎?他在 虛擬這個對象嗎?他在構建管理機構?仍是在構建一個對象管理?空間管理,爲了快速引入了什麼樣的複雜算法,實際上的原型算法應該是什麼樣的?設計
只有深刻到這個抽象層次,咱們才能很好的把握住系統的每一條線,每個對象的意義。只用從原型出發,咱們才能把握住這個系統的實質所在,在幹什麼?他要表達什麼?設計者爲何要這樣想?最終極的想法是什麼?這樣,代碼分析就變得簡單明瞭,讀代碼就變成了是在印證猜測,修正方向。對象