這是網易公開課 密西西比河谷州立大學:Android應用程序開發 的筆記。
視頻地址:http://v.163.com/special/opencourse/developingandroidapplications.html
這個課程有六節課。課程目標是在這六節課後讓學習者對android平臺有一個比較好的瞭解,兼作複習。
概述
android是一個爲移動設備準備的軟件棧,它包括一個Linux操作系統和一些中間件,還附帶一些關鍵性的應用,比如聯繫人管理、地圖應用、瀏覽器等等。
安卓由谷歌開發和維護,它是一個開源項目。
下面的這張圖描述了安卓平臺的結構。
安卓結構可分爲4層,應用層:預裝一些應用,比如聯繫人管理。開發者可以在這層開發自己的應用。第二層是android框架層,提供開發這一些應用接口,其中有一系列不同的子框架,如處理窗口,處理電話事件的框架等。
框架本身是在一系列庫之上寫出來的。也就是綠色這層,庫內容由C和C++編寫,這些庫是自帶的。有一些由谷歌實現,一些是開源集成項目。如SQLite和WebKit等。
安卓運行時則是基於Dalvik虛擬機。由谷歌實現。
所有這些都建於Linux內核之上。
你開發的應用和系統自帶的應用都是基於應用框架,沒有本質差別。也就是說谷歌安卓的API都是公開的。
Dalvik虛擬機介紹:
移動設備的計算和存儲資源有限,於是谷歌開發了專門的虛擬機。
Dalvik是基於寄存器的虛擬機而不是基於堆棧機器。總體而言,它將提供更高效的指令流。
每條指令上所得到的語義內容將會更多。
一個for循環由Dalvik轉爲彙編語言後的代碼行數要顯著少於一般的Java虛擬機的數量。
實際的結構塊和基本的安卓概念
活動(Activity):代表用戶正在做某事,這通常呈現在同一屏幕上,但在屏幕上可以有多個視圖。
視圖:視圖View是安卓的GUI基類。用來在區域內描繪矩形,以及對屏幕區域發生的事件做出響應。它是圖形化及交互的基本抽象。
建立新活動則通過擴展Activity類實現。
從Activity中派生新類。
服務(service):service是沒有用戶界面的應用或應用組件,它在後臺運行。使用時同Activity。比如播放器例子。
廣播接收器(Broadcast receiver):Broadcast receiver 接收廣播並做出反應。它也沒有用戶界面,但能調用有用戶界面的活動。
內容提供器(Content Provider):content provider是用來管理應用程序數據的。它可以讓一個應用的數據用於設備上的其他應用,也可用於該應用本身,即我們能使用內容提供器訪問其數據。
數據一般存於SQLite數據庫中。安卓還支持文件系統的概念。它擁有一些鍵值對所組成的首選項。
也就是說,本地數據存儲有幾種不同的方式。
如聯繫人應用的聯繫人數據庫。
以上是安卓應用中的四大構建塊。
每個安卓進程都以單獨的Linux進程運行。
每個應用安裝後都具有唯一用戶ID。
從用戶界面來看,安卓會管理所謂的“活動棧”。這些活動將形成活動棧,安卓系統會管理所有的細節問題。
下圖是安卓活動的生命週期圖:
在活動基類中存在鉤子函數,在狀態轉換時,由底層框架調用,如onCreate() hook function。
當應用不在前臺,但佔用大量資源時,系統會終止進程。
當內存空間很低時,安卓系統會選擇性地停止那些不在前臺,但佔用內存的應用。當用戶再次回到該應用時,需要重新onCreate,所以在停止時需要存儲應用狀態。
程序如何從一個活動轉移到另一個活動。在安卓中用intent來處理。
intent是一個活動傳給另一個的異步信息。一般的intent包含有兩段數據,首先是動作信息,然後是該動作所需數據的實際URL。在安卓中還分爲顯性意圖和隱性意圖。在顯性意圖中,活動中明確了另一個活動是什麼,可以在意圖中硬編碼,明確想轉到的活動是什麼。
但更一般的方式是隱性意圖。只說明要做的動作和所需數據。在編寫活動時會編寫意圖過濾器(intent filter),聲明哪個活動能夠運行相應的意圖,然後系統會將控制轉給此活動。比如用瀏覽器瀏覽網頁。