Android架構分析
一、安卓架構圖直覺
Android系統架構由五部分組成,Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。以下這張圖展示了Android系統的主要組成部分:
1、Linux Kernel
Android基于Linux2.6提供核心的系統服務,例如:安全、記憶體管理、程序管理、網絡堆棧、驅動模型。Linux Kernel也作為硬體和軟體之間的抽象層,它隐藏具體硬體細節而為上層提供統一的服務。
如果你隻是做應用開發,就不需要深入了解Linux Kernel層。
2、Android Rundtime
Android包含一個核心庫的集合,提供大部分在Java程式設計語言核心類庫中可用的功能。每一個Android應用程式時Dalvik虛拟機中的執行個體,運作在它們自己的程序中。Dalvik虛拟機設計成,在一個裝置可以高效運作地多個虛拟機。Dalvik虛拟機可執行檔案格式是.dex,.dex格式是專門為Dalvik設計的一種壓縮格式,适合記憶體和處理器速度有限的系統。
大多數虛拟機包括JVM都是基于棧的,而Dalvik虛拟機則是基于寄存器的。兩種架構各有優勢,一般而言,基于棧的機器需要更多指令,而基于寄存器的機器指令更大。dx是一套工具,可以将Java .class轉換為.dex格式。一個dex檔案通常會有多個.class,由于dex有時必須進行最佳化,會使檔案大小增加1-4倍,以ODEX結尾。
Dalvik虛拟機依賴于Linux提供基本功能,如線程和底層記憶體管理。
3、Application Framework
通過提供開放的開發平台,Android使開發者能夠編制很豐富的應用程式。開發者可以自由地利用裝置硬體優勢、通路位置資訊、運作背景服務、設定鬧鐘、向狀态欄添加通知等等。
(1)Activity Manager — 活動管理器
管理應用程式生命周期,提供通用的導航回退功能。
(2)Window Manager
(3)内容提供者—Content Providers
使所有應用程式能通路其他應用程式(如通訊錄)的資料,或共享自己的資料。
(4)View System — 視圖
豐富的、可擴充的視圖集合,可用于建構一個應用程式,包括清單、網格、文本框、按鈕。甚至是内嵌的網頁浏覽器。
(5)Package Manager
(6)Telephony Manager
主要提供了一系列用于通路與手機通訊相關的狀态和資訊的get方法。其中包括手機的SIM卡的狀态和資訊,電信網絡的狀态以及手機使用者的資訊。
擷取:
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
(7)Resource Manager — 資料總管
提供通路非代碼資源,如本地化字元串、圖形和布局檔案。
(8)Notification Manager — 通知管理器
使所有的應用程式能夠在狀态欄顯示自定義警告。
(9)Location Manager
4、Applications
Android裝配一個核心應用程式集合,包括電子郵件用戶端、SMS程式、月曆、地圖、浏覽器、聯系人和其他設定。所有應用程式都是用Java程式設計語言寫的。
二、詳解Application Framework
1、Window Manager [ import android.view.WindowManager ]
WindowManager是Android中一個重要的Service,是全局且唯一的。WindowManager是繼承ViewManager的。
WindowManager主要用來管理視窗的一些狀态、屬性、view增加、删除、更新、視窗順序、消息收集和處理等。Android中真正展示給使用者的是window和view,activity所起的作用主要是處理一些邏輯問題,比如生命周期管理以及建立視窗。
WindowManager中還有一個重要的靜态類LayoutParams。通過它可以設定和獲得目前視窗的一些屬性。
兩個常見應用:
(1)實作懸浮視窗
(2)擷取Display中螢幕高寬
(3)改變Dialog背景透明
2、PackageManager
作用:擷取Android系統中應用程式的資訊,主要包括packageName, label, icon, 占用大小等。具體包括:
1)安裝、解除安裝應用查詢permission相關資訊;
2)查詢Application相關資訊(application, activity, receiver, service, provider及相關屬性等)
3)查詢已安裝應用;
4)增加、删除permission;
5)清除使用者資料、緩存、代碼段等。
幾個常見應用:
(1)擷取已安裝的應用程式的資訊
(2)擷取系統中所有滿足ACTION_MAIN和CATEGORY_LAUNCHER的應用程式的包名、程式入口Activity名
3、Notification Manager
NotificationManager:該類負責狀态欄通知的管理,負責發通知、清楚通知等。
Notification:是具體的狀态欄通知對象,可以設定icon、文字、提示聲音、震動等參數。
通知需要的基本參數:
1)通知的圖示
2)通知的标題和内容
3)點選通知執行頁面跳轉 ( PendingIntent )
可選參數:
狀态欄頂部提示消息、提示音、振動、燈光等
(1)使用系統定義的通知
(2)使用自定義的通知