㈠ android架構設計的思想與原則是什麼
rlei分析了Android的設計哲學:
理解好Intent,就可以理解Android哲學(所有應用生來平等)的一部分。舉個簡單的例子,iOS裡面應用要集成SNS如facebook/twitter/sina weibo等,都需要應用自己實現(iOS5也只是集成twitter一家);Android上只需要廣播一個share內容的intent。從理解Intent如何工作開始,你就在慢慢理解Activity Manager, Package Manager, Services這些Android的重要組件是如何工作的。
另外Binder是Android架構里非常核心的一塊。Android基於Intent的消息傳遞和組件/應用解耦,下面的基礎都是Binder IPC。在這一點上,Android實際上是光榮的傳承了BeOS和Palm OS 6(悲催的OS6...)未能發揚光大的一部分。
MVC(Content Provider, Activity, Layout, Adapters)這個比較基礎,也不算Android特有的。
Content Provider對數據訪問的抽象也是比較有意思的一塊。理想情況下,content provider可以讓客戶端用URI以語義化的方式訪問數據(URI本身即表示數據層次結構和查詢條件),而下面資料庫表的結構可以任意變動,不影響客戶端代碼。當然實做的時候content provider還是會被各種復雜的where子句暴露出SQL的實現細節
至於Android的許可權管理,其實比較簡單,主要是利用現成的linux安全模型,進程之間相互隔離。API級別的許可權管理和JVM類似。
Billy Cui重點解析了許可權系統的設計:
Android的許可權系統是基於Linux,但又增加了很多自己的控制模塊。
總體上來說,其分為以下幾部分許可權系統:
1. userid : 繼承於linux,對於多個app,通過shareuid的方式可以使用同一個userid,主要承擔一些目錄訪問許可權之類的工作,比如私有目錄只能由同一uid應用訪問。
2. 安裝level:system level or app level,這個是根據應用的安裝位置決定的,在system/app下安裝的應用就是system level,在許可權訪問中會得到更多的許可權,比如靜默安裝應用的許可權等。
3. permission : 這個是最主要的許可權控制,一般開發者開發應用主要是接觸這個部分,在這部分中,會根據應用在AndroidManifest.xml中聲明的use-permission而在訪問相應api或資源時判斷其是否有訪問許可權,比如常用的android.permission.INTERNET等。
4. signature: 簽名,是Android許可權系統中的重要組成部分,對於系統簽名的應用,會有一些特殊的功能,而shareuid等特性也是需要同一簽名作為基礎。此外,permission在設置/自定義其許可權時也經常會使用到簽名,比如控制只有我自己的應用才可以訪問我自己定義的公開API。
除此以外,其實Android在uid的裡面設置了一些預定義有特殊功能的uid,比如system/media等,在配置其system level的services的時候會用到。
董兆輝則認為Android主要是基於組件搭配思想:
說到Android架構的設計思想和原則,按我的理解主要是組件搭配,即在用戶看來,所有的mole或者組件,都是可以重復利用和簡單組合的。想法是好的,不過有得必有失,或者說Android現在做的還不夠好,在性能方面是很低的,否則的話Android也不會推出補丁(NDK之類的,dalvik的不斷升級)。
我覺得所有Framework或者平台或者語言都想給應用開發者最方便使用的介面,最人性化的體驗,同時又要爭取最大的性能,兩者權衡折中吧。不過隨著硬體速度的飛速增長,性能的權重會變低。
范懷宇還談到了資源體系:
Android架設在Linux之上,因此,繼承了Linux可移植性、用戶管理機制、文件系統,等等。
Android的核心在Framework層,本質上,這是一個基於組件的應用開發系統,組件間通過消息(Intent)進行通信。一方面,Intent是通信信息的載體,另一方面,Intent也定義了Android組件的通信協議。
Android可以對組件所運行的進程做託管,在Android中,進程概念相當薄弱。依賴於進程託管,Android可以輕松支撐多任務多進程的應用模型。