Android開發(fā)入門解析_第1頁
Android開發(fā)入門解析_第2頁
Android開發(fā)入門解析_第3頁
Android開發(fā)入門解析_第4頁
Android開發(fā)入門解析_第5頁
已閱讀5頁,還剩145頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、Android簡介,什么是Android?,Android 是一個專門針對移動設備的軟件集 一個操作系統(tǒng),中間件和一些重要的應用程序 Android SDK 提供了在Android平臺上使用Java語言進行Android應用開發(fā)必須的工具和API接口。,Android特性,應用程序框架 支持組件的重用與替換 Dalvik 虛擬機 專為移動設備優(yōu)化 集成的瀏覽器 基于開源的WebKit 引擎 優(yōu)化的圖形庫 包括定制的2D圖形庫,3D圖形庫基于OpenGL ES 1.0 (硬件加速可選) SQLite 用作結構化的數(shù)據(jù)存儲 多媒體支持 包括常見的音頻、視頻和靜態(tài)圖像格式 (如 MPEG4, H.2

2、64, MP3, AAC, AMR, JPG, PNG, GIF) GSM 電話技術 (依賴于硬件) 藍牙Bluetooth, EDGE, 3G, 和 WiFi (依賴于硬件) 照相機,GPS,指南針,和加速度計(accelerometer) (依賴于硬件) 豐富的開發(fā)環(huán)境 包括設備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件,Android架構,應用程序,Android會同一系列核心應用程序包一起發(fā)布,該應用程序包包括。所有的應用程序都是使用JAVA語言編寫的。 email客戶端 SMS短消息程序 日歷 地圖 瀏覽器 聯(lián)系人管理程序等,應用程序框架,開發(fā)人員也可以完

3、全訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發(fā)布它的功能塊并且任何其 它的應用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程序重用機制也使用戶可以方便的替換程序組件。 隱藏在每個應用后面的是一系列的服務和系統(tǒng), 其中包括; 豐富而又可擴展的視圖(Views),可以用來構建應用程序, 它包括列表(lists),網(wǎng)格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。 內(nèi)容提供器(Content Providers)使得應用程序可以訪問另一個應用程序的數(shù)據(jù)(如聯(lián)系人數(shù)

4、據(jù)庫), 或者共享它們自己的數(shù)據(jù)。,應用程序框架,資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。 通知管理器 (Notification Manager) 使得應用程序可以在狀態(tài)欄中顯示自定義的提示信息。 活動管理器( Activity Manager) 用來管理應用程序生命周期并提供常用的導航回退功能。,Android平臺程序庫,Android 包含一些C/C+庫,這些庫能被Android系統(tǒng)中不同的組件使用。它們通過 Android 應用程序框架為開發(fā)者提供服務。以下是一些核心庫: 系統(tǒng) C 庫 - 一

5、個從 BSD 繼承來的標準 C 系統(tǒng)函數(shù)庫( libc ), 它是專門為基于 embedded linux 的設備定制的。 媒體庫 - 基于 PacketVideo OpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態(tài)圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。 Surface Manager - 對顯示子系統(tǒng)的管理,并且為多個應用程序提 供了2D和3D圖層的無縫融合。 LibWebCore - 一個最新的web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖。 SGL - 底層的2D圖形引擎 3D l

6、ibraries - 基于OpenGL ES 1.0 APIs實現(xiàn);該庫可以使用硬件 3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。 FreeType -位圖(bitmap)和矢量(vector)字體顯示。 SQLite - 一個對于所有應用程序可用,功能強勁的輕型關系型數(shù)據(jù)庫引擎。,Android運行庫,Android 包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。 每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬 機實例。Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統(tǒng)。 Dalvik虛擬機執(zhí)行(.dex)的Dalvi

7、k可執(zhí)行文件,該格式文件針對小內(nèi)存使用做了 優(yōu)化。同時虛擬機是基于寄存器的,所有的類都經(jīng)由JAVA編譯器編譯,然后通過SDK中 的 dx 工具轉化成.dex格式由虛擬機執(zhí)行。 Dalvik虛擬機依賴于linux內(nèi)核的一些功能,比如線程機制和底層內(nèi)存管理機制。,Linux內(nèi)核,Android 的核心系統(tǒng)服務依賴于 Linux 2.6 內(nèi)核,如安全性,內(nèi)存 管理,進程管理, 網(wǎng)絡協(xié)議棧和驅動模型。 Linux 內(nèi)核也同時作為硬件 和軟件棧之間的抽象層。,Android SDK核心包,android.util 包含有許多底層的工具類,例如專用容器類,XML工具等等。 android.os 提供基本的

8、操作系統(tǒng)服務、消息傳遞和進程間通訊。 android.graphics 核心圖形繪制包。 android.text, android.text.method, android.text.style, and android.text.util 提供豐富的文本處理工具、富文本支持以及輸入法等等。 android.database 包含數(shù)據(jù)庫相關的底層API。 android.content 提供大量的訪問存儲在設備上的數(shù)據(jù)的服務:安裝在設備上的應用及相關資源,用于持續(xù)的動態(tài)數(shù)據(jù)的內(nèi)容提供器(content provider)。 android.view 核心用戶界面框架。 android.wid

9、get 提供構建view包的標準用戶界面元素(列表、按鈕、布局管理器等等)。 android.app 提供高層應用模型,通過活動實現(xiàn)。,Android SDK附加包,vider 包括了平臺內(nèi)的各個內(nèi)容提供器(content providers)的定義。 android.telephony 提供與設備的電話協(xié)議棧交互的API。 android.webkit 包含各種用于web內(nèi)容的API。 ,開發(fā)環(huán)境,安裝Android SDK 設置開發(fā)環(huán)境 JDK 6.0u14 Eclipse 3.5(Galileo) Android SDK 1.5 ADT 0.9.1,系統(tǒng)和軟件需求,

10、用Android sdk的代碼和工具開發(fā)Android應用程序,你需要適合的開發(fā)電腦以及開發(fā)環(huán)境,如下描述: 所需操作系統(tǒng): Windows XP 或 Vista Mac OS X 10.4.8 或更高版本 (僅支持x86) Linux ( Linux Ubuntu Dapper Drake 版本已測試) 所需開發(fā)環(huán)境: Eclipse IDE Eclipse 3.3 (Europa), 3.4 (Ganymede) 3.5(Galileo) Eclipse JDT 插件 (大多數(shù)的 Eclipse IDE 包包含) WST (可選,但Android編輯器的功能需要,它被包含在most Ecl

11、ipse IDE packages 中) JDK 5 或 JDK 6 (只有JRE是不夠的) Android Development Tools 插件 (可選 ) 不兼容GNU Java編譯器(gcj) 其他開發(fā)環(huán)境或 IDE JDK 5 或 JDK 6 (僅有JRE不夠) Apache Ant 1.6.5 或更高版本( Linux 和 Mac環(huán)境下), 1.7 或更高版本( Windows環(huán)境下) 不兼容GNU Java編譯器(gcj),安裝SDK,下載完SDK后,把.zip文件解壓到你電腦上合適位置. 默認情況下, SDK文件被解壓到 android_sdk_文件夾. 這個文件夾包含 to

12、ols/, samples/等. 請注意系統(tǒng)里SDK解壓后的文件夾的名字和位置 當你安裝Android插件和使用SDK工具時,你將需要引用這個文件夾。 你可以添加 SDK tools 的文件夾路徑到你的環(huán)境變量中. 如上所述, tools/文件夾位于SDK文件夾中。 Linux環(huán)境下,修改/.bash_profile或者 /.bashrc文件. 找到環(huán)境變量設置的地方,加入tools/的絕對路徑。如果找不到該設置,你需要新添加一行: export PATH=$PATH:/tools Mac環(huán)境下,在你的home文件夾里面查找.bash_profile,然后和linux一樣處理。如果之前沒有.b

13、ash_profile文件,你可以創(chuàng)建一個新的。 Windows環(huán)境下, 右擊我的電腦, 并選擇屬性. 在標簽頁高級, 點擊環(huán)境變量, 當對話框出現(xiàn), 在系統(tǒng)變量欄目里雙擊路徑 ( Path ) .并添加tools/ 文件夾的完整路徑. 添加 tools 到你的環(huán)境變量里,這樣你可以運行Android Debug Bridge (adb)和其他tools下命令,而不需要輸入完整路徑名。需要說明的是, 如果你升級你的SDK, 需要將你的相應環(huán)境變量更新到新的位置。,Eclipse插件(ADT)安裝,使用 Eclipse IDE作為開發(fā)Android應用的環(huán)境,你可以安裝支持Android工程和工

14、具的通用插件Android Development Tools (ADT). ADT插件包含強大的擴張,使得創(chuàng)建,運行和調(diào)試Android 更快速,更簡單。 如果你不使用 Eclipse IDE,就不必下載和安裝ADT插件 下載和安裝ADT插件,請按照你們各自Eclipse版本步驟安裝。 Eclipse 3.3 (Europa)Eclipse 3.4 (Ganymede) 開始Eclipse,然后選擇 Help Software Updates Find and Install. 對話框出現(xiàn)后,選擇 Search for new features to install 點擊 Next. 點擊N

15、ew Remote Site. 在對話框中,輸入遠程站點的名字(如Android Plugin),輸入站點如下: https:/dl- 點擊OK. 你可以看到新的站點添加到搜索列表中(并檢查),點擊Finish. 在下面的搜索結果對話框,選擇復選框 Android Plugin Developer Tools. 它將會檢查特性: Android Developer Tools, 和 Android Editors. Android 編輯器的特性是可選的,但我們推薦安裝它,如果你選擇安裝,需要前面提到的WST插件。點擊 Next. 閱讀許可協(xié)議,然后選擇接受許可協(xié)議,點擊 Next.,點擊 Fi

16、nish. ADT插件沒有簽名,你可以點擊“Install All”來安裝所有東西。 重啟 Eclipse. 啟動 Eclipse, 選擇 Help Software Updates. 在出現(xiàn)的對話框里,點擊標簽頁 Available Software. 點擊 Add Site. 輸入下面的地址: https:/dl- 點擊 OK. 返回可用軟件的視圖,你會看到這個插件. 選擇下一步到 Developer Tools 并點擊 Install. 在接下來的安裝窗口,選中Android Developer Tools和 Android Editors。Android編輯器特性是可選的,但是我們推薦

17、安裝它,如果你選擇安裝,需要前面提到的WST插件。點擊 Finish. 重啟 Eclipse。 重啟之后, update your Eclipse preferences 指向SDK文件夾: 選擇 Window Preferences. 來打開屬性面板。 (Mac OS X: Eclipse Preferences) 從左邊面板選擇 Android。 在主界面上定位SDK 點擊 Browse. 然后定位 SDK文件夾。 點擊 Apply, 然后點擊 OK。,ADT安裝疑難解答,下載ADT壓縮文件 (不解壓). 按照默認安裝的第一部和第二步(如上). 在 Eclipse 3.3, 點擊New A

18、rchive Site. In Eclipse 3.4, click Add Site., 然后點擊Archive. 瀏覽和選擇已經(jīng)下載的壓縮文件。 從第五步開始完成上面剩下的流程。 更新你的插件,你必須按照這些步驟代替默認的更行說明。,開發(fā)調(diào)試,介紹在android上開發(fā)調(diào)試應用程序 創(chuàng)建 編譯 運行 調(diào)試,在eclipse上開發(fā)Android應用程序,在用eclipse IDE開發(fā)android應用程序之前,你首先要創(chuàng)建一個Android工程,并且建立一個啟動配置,在此之后你才可以開始編寫,運行,以及調(diào)試你的應用程序。,創(chuàng)建一個Android工程,ADT提供了一個新的工程向導,你可以快速的

19、創(chuàng)建一個新的工程或者在現(xiàn)有代碼上創(chuàng)建工程。創(chuàng)建工程的步驟如下: 選擇File New Project 選擇 Android Android Project, 然后按下 Next 選擇項目內(nèi)容: 選擇 Create new project in workspace, 為編碼創(chuàng)建一個全新的工程。 輸入工程名稱(project name),基礎軟件包的名稱(the base package name),以及Activity 類的名稱。以創(chuàng)建stub .java文件等文件和程序名字。 選擇Create project from existing source ,為已有代碼創(chuàng)建一個工程。如果你想編譯運行

20、SDK中提供的示例程序,可以使用這個選項。示例程序的存放在SDK的samples/目錄下。 瀏覽包含已有代碼的目錄,點擊ok,如果目錄中包含有可用的android manifest 文件,ADT將為你填寫合適的軟件包,activity,和應用程序名稱。 按下Finish. ADT插件會根據(jù)你的工程類型創(chuàng)建合適的文件和文件夾,如下: src/ 包含stub .java Activity文件的文件夾. res/ 資源文件夾. AndroidManifest.xml 工程清單.,創(chuàng)建一個啟動項,在eclipse上運行調(diào)試應用程序之前,你必須為它創(chuàng)建一個啟動項。啟動項指定哪個工程將被啟動,哪個acti

21、vity開始工作,以及使用哪些模擬器選項等。 按照以下步驟為Eclipse版本的應用程序創(chuàng)建合適的啟動項: 打開啟動項管理工具。 在 Eclipse 3.3 (Europa)的版本中,酌情選擇 Run Open Run Dialog. or Run Open Debug Dialog. 。 在Eclipse 3.4 (Ganymede)版本中,酌情選擇 Run Run Configurations. or Run Debug Configurations. 。 在左邊的工程類型列表選擇Android Application選擇,雙擊(或者點擊右鍵選擇new),創(chuàng)建一個新的啟動項。 輸入啟動項名

22、稱。 在 Android標簽中,瀏覽要開始的工程和Activity 。 在Target標簽中,設置想要顯示的屏幕及網(wǎng)絡屬性,以及其他任何模擬器啟動選項。 你可以在Common標簽中設置更多的選項. 按下Apply保存啟動配置,或者按下Run或Debug()。,運行和調(diào)試應用程序,可以按照以下的說明運行和調(diào)試應用程序了。 從eclipse主菜單,根據(jù)情況選擇RunRun 或者 RunDebug,開始運行或者調(diào)試活動啟動項。 注意,這里活動啟動項是在運行配置管理中最最近一次選中的那個。它不一定就是在Eclipse Navigation 面板中選擇的程序(如果有的話) 設置和修改活動啟動項,可以使用

23、啟動項管理工具。如何獲得啟動項管理工具可以參考創(chuàng)建一個啟動項 運行或調(diào)試應用程序將觸發(fā)以下動作: 啟動模擬器,如果他還沒有開始運行。 編譯工程, 如果在上次編譯的基礎上修改過代碼,將重新編譯。在模擬器上安裝應用程序。 Run選項,開始運行程序。 Debug 在Wait for debugger 模式下啟動程序,然后打開調(diào)試窗口并將Eclipse Java調(diào)試器和程序關聯(lián)。,應用程序簽名(一),Android系統(tǒng)要求所有的程序經(jīng)過數(shù)字簽名才能安裝,如果沒有可用的數(shù)字簽名,系統(tǒng)將不許安裝運行此程序。不管是模擬器還是真實設備,只要是android系統(tǒng),這都適用。鑒于此原因,在設備或者是模擬器上運行調(diào)

24、試程序之前,你必須為你的應用程序設置數(shù)字簽名。 理解android程序簽名的重要幾點:: 所有的程序都必須簽名,沒有被簽名的程序,系統(tǒng)將不能安裝。 系統(tǒng)僅僅會在安裝的時候測試簽名證書的有效期,如果應用程序的簽名是在安裝之后才到期,那么應用程序仍然可以正常啟用。 你可以使用標準工具-Keytool and Jarsigner-生成密鑰,來簽名應用程序的.apk文件。,應用程序簽名(二),Android SDK 工具可以幫助你在調(diào)試時給應用程序簽名。ADT插件和Ant編譯工具都提供了兩種簽名模式-debug模式和release模式 debug模式下,編譯工具使用JDK中的通用程序Keytool通過

25、已知方法和密碼創(chuàng)建秘鎖和密鑰。每次編譯的時候,工具使用debug密鑰簽名應用程序的.apk文件。因為密碼是已知的,工具不需要在每次編譯的時候提示你輸入密鎖和密鑰。 測試證書期限,自創(chuàng)建時間起有一年的期限 當你的應用程序已經(jīng)準備release了,你可以在release 模式下編譯。release模式下,工具編譯時不會將.apk文件簽名。你需要用Keytool生成密鑰和密鎖,再用JDK中的Jarsigner工具給.apk文件簽名。 Market受理應用一般要求30年期限,使用ApiDemo示例應用程序,Android SDK包含了一套示例程序,他們驗證了許多功能以及API的用法。ApiDemos軟

26、件包被提前安裝在模擬器中,所以你可以啟動模擬器,在主畫面的應用程序抽屜里打開它。 你也可以在/samples/ApiDemos中找到源碼,可用看看它,學習Demo的實現(xiàn)方法。 如果你愿意,你還可以將ApiDemo的示例程序作為一個工程加載進來,修改并在模擬器上運行。然而,在這之前你首先要卸載之前已經(jīng)安裝的ApiDemos。如果你沒有移除之前安裝的版本而直接在開發(fā)環(huán)境中運行或修改ApiDemos,將會有安裝錯誤。,調(diào)試,Android有相當廣泛的一套工具幫助你調(diào)試你的應用程序: DDMS -一個生動的程序,它支持端口轉換(因此你可以在IDE中給你的代碼下端點),支持抓取模擬器屏幕,線程和堆棧信息

27、,以及許多其他功能。你還可以運行l(wèi)ogcat重新獲得Log信息。點擊此連接查看更多信息。 logcat- 轉儲系統(tǒng)信息,這些信息包括,模擬器拋出錯誤時堆棧的運行過程以及日志信息。運行l(wèi)ogcat,點擊此連接。 Android Log - 輸出模擬器上log文件信息日志類。如果你在DDMS上運行了logcat,你可以實時閱讀這些信息。在你的代碼中添加logging方法的調(diào)用。使用 log類,你可以根據(jù)你想獲得信息的重要程度不同調(diào)用Log.v(verbose),Log.d()(debug),Log.i() (information),Log.w()(warning)或者Log.e(error).來

28、分派log信息Log.i(MyActivity, MyClass.getView() Requesting item number + position) 你可以用logcat閱讀這些信息。 Traceview - Android可以將函數(shù)的調(diào)用情況以及調(diào)用時間保存到一個log文件中,你可以用圖形閱讀器Traceview查看詳細內(nèi)容。更多信息查看這個連接下的主題 Eclipse plugin -Eclipse插件整合了相當數(shù)量的工具(ADB,DDMS,logcat output, 以及其它功能),點擊此連接查看更多信息。 Debug and Test Device Settings -Andr

29、oid揭示了很多有用的設定,例如CPU使用率和 幀速率,設備上的調(diào)試和測試設置,Android允許你設置多個設定以便你測試和調(diào)試程序。獲得模擬器的開發(fā)設置,可以選擇Dev ToolsDevelopment Settings。 按照以下選項將打開開發(fā)設置頁(或其中之一): Debug app 選擇要被調(diào)試的程序,你不需要設置這個來關聯(lián)調(diào)試器,但是這個變量有兩個作用: 防止Android在調(diào)試的斷點處長時間停留時拋出錯誤。 允許你選擇Wait for Debugger選項來暫停程序啟動,直到調(diào)試器被關聯(lián)上(如下介紹) Wait for debugger 阻塞程序加載直到關聯(lián)上調(diào)試器。這樣你可以在o

30、nCreate()中設置端點,這在調(diào)試Activity的啟動進程時很重要。當你改變這個選項,任何當前運行的程序實例將被殺死。為選中此框,你必須如上面介紹的選擇一個調(diào)試程序。這和在代碼中添加waitForDebugger()是一樣的。 Immediately destroy activities 告訴系統(tǒng)只要activity停止了就銷毀它。 (猶如 Android必須回收內(nèi)存). 這個在測試 onSaveInstanceState(Bundle) / onCreate(android.os.Bundle)代碼路徑 時非常有用, 否則將難以生效.選擇這個選項可能帶來很多問題,因為他們沒有保存程序的

31、狀態(tài)。 Show screen updates 選中這個選項時,屏幕上任何被重繪的矩形區(qū)域會閃現(xiàn)粉紅色。這對于發(fā)現(xiàn)屏幕不必要的繪圖很有用。 Show CPU usage 在屏幕頂端顯示一個CPU進度,顯示CPU的使用情況。 上面紅色欄顯示總的CPU使用率,下方綠色欄顯示目前畫面的CPU使用時間。注意:一旦打開次功能就不能關掉,除非重新啟動模擬器。? Show background 沒有activity屏幕顯示時顯示背景面板,這個通常在調(diào)試的時候才會發(fā)生。 模擬器重起后這些設置仍被記憶。,頂端調(diào)試技巧,快速堆棧轉儲 從模擬器上獲得堆轉儲,你可以登錄adb shell,用ps命令找到你想要的進程,

32、然后用kill-3,堆棧使用軌跡將顯示在log文件中。 在模擬器屏幕上顯示有用信息 設備可以顯示一些有用信息,例如CPU使用率,以及高亮顯示重繪區(qū)域??梢栽陂_發(fā)設定窗口打開和關閉這些功能。Setting debug and test configurations on the emulator.中有詳細介紹。 你可以通過Dalvik Debug Monitor Service工具獲得轉儲狀態(tài)信息。請參考adb中介紹的dumpsys and dumpstate 獲得模擬器中應用程序狀態(tài)信息(dumpsys) 你可以通過Dalvik Debug Monitor Service工具獲得dumpsys

33、信息。參考adb中介紹的dumpsys and dumpstate 。 獲得無線連接信息 你可以通過Dalvik Debug Monitor Service工具獲得無線連接信息。在Device菜單中選擇Dump radio state,記錄跟蹤數(shù)據(jù) 你可以在activity中通過調(diào)用android.os.Debug.startMethodTracing()來記錄函數(shù)的調(diào)用以及其它跟蹤數(shù)據(jù)。詳細的參考Running the Traceview Debugging Program 。 記錄無線數(shù)據(jù) 默認情況下系統(tǒng)不記錄無線數(shù)據(jù)(數(shù)據(jù)很多)。然而,你可以用下面的命令記錄無線數(shù)據(jù): adb shell

34、 logcat -b radio 運行adb Android 有adb工具,他提供了許多功能,包括移動和同步文件到模擬器上,改變端口,在模擬器上運行 UNIX shell。 詳見Using adb。 獲得模擬器屏幕截圖 Dalvik Debug Monitor Server (DDMS)可以抓取模擬器屏幕截圖。 使用調(diào)試幫助類 Android為方便使用提供了調(diào)試幫助類,例如util.Log 和 Debug,編譯安裝Android應用程序,Android要求專門的編譯工具可以正確的編譯資源文件和應用程序的其他部分,因此,你必須為你的應用程序建立一個專門的編譯環(huán)境。 專門Android編譯器編譯步

35、驟包括,編譯XML和其他資源文件并創(chuàng)建合適的輸出格式。編譯好的Android應用程序是一個.apk壓縮文件,它含有.dex文件,資源文件,原data文件,以及其他文件。你可以通過scratch,或者源文件構造一個合適的Android工程。 Android目前不支持的在本地代碼上開發(fā)第三方應用程序。 比較推薦的Andriod應用程序開發(fā)方法是use Eclipse with the Android plugin,它支持編譯,運行,調(diào)試Android應用程序。,移出一個Android應用程序,移出一個安裝在模擬器上的應用程序,你需要執(zhí)行adb刪除.apk文件。.apk文件是在安裝的時候發(fā)送到模擬器

36、上的。使用adb shell進入設備的shell,切換到data/app目錄下,用rm命令刪除apk文件 :rm your_app.apk 設備應用程序管理器,四大組件,Android應用中的四種組件 活動 廣播接收器 服務 內(nèi)容提供器 XML配置文件 AndroidManifest.xml,Android應用程序構成,一般情況Android應用程序是由以下四種組件構造而成的: 活動 廣播接收器 服務 內(nèi)容提供器 并不是每個Andorid應用程序都必須構建這4個組件,有些可能由這些組件的組合而成。 XML配置文件, 它用于定義應用程序中需要的組件、組件的功能及必要條件等。這個文件是必須的。,活

37、動,活動是最基本的Andorid應用程序組件,應用程序中,一個活動通常就是一個單獨的屏幕。每一個活動都被實現(xiàn)為一個獨立的類,并且從活動基類中繼承而來, 活動類將會顯示由視圖控件組成的用戶接口,并對事件做出響應。 大多數(shù)的應用是由多屏幕顯示組成。例如,一個文本信息的應用也許有一個顯示發(fā)送消息的聯(lián)系人列表屏幕, 第二個屏幕用來寫文本消息和選擇收件人, 再來一個屏幕查看消息歷史或者消息設置操作等。這里每一個這樣的屏幕就是一個活動,很容易實現(xiàn)從一個屏幕到一個新的屏幕并且完成新的活動。 在某些情況下當前的屏幕也許需要向上一個屏幕動提供返回值-比如讓用戶從手機中挑選一張照片返回通訊錄做為電話撥入者的頭像。

38、 當打開一個新的屏幕時,之前一個屏幕會被置為暫停狀態(tài)并且壓入歷史堆棧中。用戶可以通過回退操回到以前打開過的屏幕。我們可以選擇性的移除一些沒有必要保留的屏幕,因為Android會把每個從桌面打開的程序保留在堆棧中。,活動(Intent 和 Intent Filters),調(diào)用Android專有類 Intent 進行構屏幕之間的切換。 Intent是描述應用想要做什么。Intent數(shù)據(jù)結構兩最重要的部分是動作和動作對應的數(shù)據(jù)。 典型的動作類型有:MAIN(活動的門戶)、VIEW、PICK、EDIT等。 而動作對應的數(shù)據(jù)則以URI的形式進行表示。 例如:要查看某一個人的聯(lián)系方式,你需要創(chuàng)建一個動作類

39、型為VIEW的intent,以及一個表示這個人的URI。 與之有關系的一個類叫IntentFilter。 當intent被要求做某事的時候,intent filter用于描述一個活動(或者BroadcastReceiver,看下面)能夠操作哪些intent。 一個活動如果要顯示一個人的聯(lián)系方式時,需要聲明一個IntentFilter,這個IntentFilter要知道怎么去處理VIEW動作和表示一個人的URI。 IntentFilter需要在AndroidManifest.xml中定義。 通過解析各種intent,從一個屏幕切換到另一個屏幕是很簡單的。當向前導航時,活動將會調(diào)用startAct

40、ivity(myIntent)方法。 然后,系統(tǒng)會在所有安裝的應用程序定義的IntentFilter中查找,找到最匹配myIntent的Intent對應的活動。新的活動接收到myIntent的通知后,開始運行。 當start活動方法被調(diào)用將觸發(fā)解析myIntent的動作,這個機制提供了兩個關鍵好處: 活動能夠重復利用從其它組件中以Intent的形式產(chǎn)生的一個請求 活動可以在任何時候被一個具有相同IntentFilter的新的活動取代,廣播接收器,可以使用BroadcastReceiver來讓你的應用對一個外部的事件做出響應。 比如:當電話呼入時,數(shù)據(jù)網(wǎng)絡可用時,或者到了晚上時。Broadcas

41、tReceivers不能顯示UI,它只能通過 NotificationManager 來通知用戶這些有趣的事情發(fā)生了。BroadcastReceivers既可以在AndroidManifest.xml中注冊, 也可以在代碼中使用Context.registerReceiver()進行注冊。 但這些有趣的事情發(fā)生時,你的應用不必對請求調(diào)用BroadcastReceivers,系統(tǒng)會在需要的時候啟動你的應用,并在必要情況下觸發(fā)BroadcastReceivers。 各種應用還可以通過使用Context.sendBroadcast() 將它們自己的intent broadcasts廣播給其它應用程序

42、。,服務,一個服務是具有一段較長生命周期且沒有用戶界面的程序。 比較好的一個例子就是一個正在從播放列表中播放歌曲的媒體播放器。在一個媒體播放器的應用中,應該會有多個活動,讓使用者可以選擇歌曲并播放歌曲。 然而,音樂重放這個功能并沒有對應的活動,因為使用者當然會認為在導航到其它屏幕時音樂應該還在播放的。 在這個例子中,媒體播放器這個活動會使用Context.startService() 來啟動一個服務,從而可以在后臺保持音樂的播放。 同時,系統(tǒng)也將保持這個服務一直執(zhí)行,直到這個service運行結束。(你可以通過閱讀Life Cycle of an Android Application 獲取更

43、多關于服務的介紹). 另外,我們還可以通過使用Context.bindService() 方法,連接到一個服務上(如果這個服務還沒有運行將啟動它)。 當連接到一個服務之后,我們還可以通過服務提供的接口與它進行通訊。拿媒體播放器這個例子來說,我們還可以進行暫停、重播等操作。,內(nèi)容提供器,應用程序能夠將它們的數(shù)據(jù)保存到文件、SQLite數(shù)據(jù)庫中,甚至是任何有效的設備中。當你想將你的應用數(shù)據(jù)與其它的應用共享時,內(nèi)容提供其將會很有用。一個內(nèi)容提供器類實現(xiàn)了一組標準的方法,從而能夠讓其它的應用保存或讀取此內(nèi)容提供器處理的各種數(shù)據(jù)類型,Activity,Android Activity Class: 類繼

44、承體系 Activity生命周期及相應接口 Activity啟動及返回 持久數(shù)據(jù)保存 權限許可 進程生命周期,Activity概述,activity是單獨的,用于處理用戶操作。幾乎所有的activity都要和用戶打交道,所以activity類創(chuàng)建了一個窗口,開發(fā)人員可以通過setContentView(View)接口把UI放到activity創(chuàng)建的窗口上,當activity指向全屏窗口時,也可以用其他方式實現(xiàn):作為漂浮窗口(通過windowIsFloating的主題集合),或者嵌入到其他的activity(使用ActivityGroup)。大部分的Activity子類都需要實現(xiàn)以下兩個接口:

45、onCreate(Bundle)接口是初始化activity的地方. 在這兒通常可以調(diào)用setContentView(int)設置在資源文件中定義的UI, 使用findViewById(int) 可以獲得UI中定義的窗口. onPause()接口是使用者準備離開activity的地方,在這兒,任何的修改都應該被提交(通常用于ContentProvider保存數(shù)據(jù)). 為了能夠使用Context.startActivity(),所有的activity類都必須在AndroidManifest.xml文件中定義有相關的“activity”項。 activity類是Android 應用生命周期的重要部

46、分。,Activity類繼承體系,activity類處于android.app包中,繼承體系如下: java.lang.Object android.content.Context android.content.ContextWrapper android.view.ContextThemeWrapper android.app.Activity 直接繼承子類: ActivityGroup, AliasActivity, ExpandableListActivity, ListActivity 非直接繼承子類: LauncherActivity, PreferenceActivity, Ta

47、bActivity,Activity生命周期,在系統(tǒng)中的Activity被一個Activity棧所管理。當一個新的Activity啟動時,將被放置到棧頂,成為運行中的Activity,前一個Activity保留在棧中,不再放到前臺,直到新的Activity退出為止。,Activity的四種狀態(tài),1. 在屏幕的前臺(Activity棧頂),叫做活動狀態(tài)或者運行狀態(tài)(active or running) 2. 如果一個Activity失去焦點,但是依然可見(一個新的非全屏的Activity 或者一個透明的Activity 被放置在棧頂),叫做暫停狀態(tài)(Paused)。一個暫停狀態(tài)的Activity

48、依然保持活力(保持所有的狀態(tài),成員信息,和窗口管理器保持連接),但是在系統(tǒng)內(nèi)存極端低下的時候將被殺掉。 3. 如果一個Activity被另外的Activity完全覆蓋掉,叫做停止狀態(tài)(Stopped)。它依然保持所有狀態(tài)和成員信息,但是它不再可見,所以它的窗口被隱藏,當系統(tǒng)內(nèi)存需要被用在其他地方的時候,Stopped的Activity將被殺掉。 4. 如果一個Activity是Paused或者Stopped狀態(tài),系統(tǒng)可以將該Activity從內(nèi)存中刪除,Android系統(tǒng)采用兩種方式進行刪除,要么要求該Activity結束,要么直接殺掉它的進程。當該Activity再次顯示給用戶時,它必須重新

49、開始和重置前面的狀態(tài)。,Activity狀態(tài)轉換,Activity的重要狀態(tài)轉換,矩形框表明Activity在狀態(tài)轉換之間的回調(diào)接口,開發(fā)人員可以重載實現(xiàn)以便執(zhí)行相關代碼,帶有顏色的橢圓形表明Activity所處的狀態(tài)。,生命周期圖示,三個關鍵循環(huán),Activity有三個關鍵的循環(huán): 1. 整個的生命周期,從onCreate(Bundle)開始到onDestroy()結束。Activity在onCreate()設置所有的“全局”狀態(tài),在onDestory()釋放所有的資源。例如:某個Activity有一個在后臺運行的線程,用于從網(wǎng)絡下載數(shù)據(jù),則該Activity可以在onCreate()中創(chuàng)建

50、線程,在onDestory()中停止線程。 2. 可見的生命周期,從onStart()開始到onStop()結束。在這段時間,可以看到Activity在屏幕上,盡管有可能不在前臺,不能和用戶交互。在這兩個接口之間,需要保持顯示給用戶的UI數(shù)據(jù)和資源等,例如:可以在onStart中注冊一個IntentReceiver來監(jiān)聽數(shù)據(jù)變化導致UI的變動,當不再需要顯示時候,可以在onStop()中注銷它。onStart(),onStop()都可以被多次調(diào)用,因為Activity隨時可以在可見和隱藏之間轉換。 3. 前臺的生命周期,從onResume()開始到onPause()結束。在這段時間里,該Act

51、ivity處于所有Activity的最前面,和用戶進行交互。Activity可以經(jīng)常性地在resumed和paused狀態(tài)之間切換,例如:當設備準備休眠時,當一個Activity處理結果被分發(fā)時,當一個新的Intent被分發(fā)時。所以在這些接口方法中的代碼應該屬于非常輕量級的。,生命周期在接口中的定義,Activity的整個生命周期都定義在下面的接口方法中,所有方法都可以被重載。所有的Activity都需要實現(xiàn) onCreate(Bundle)去初始化設置,大部分Activity需要實現(xiàn)onPause()去提交更改過的數(shù)據(jù),當前大部分的Activity也需要實現(xiàn)onFreeze()接口,以便恢復

52、在onCreate(Bundle)里面設置的狀態(tài)。 public class Activity extends ApplicationContext protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); ,Activity的啟動及

53、返回,Activity的創(chuàng)建啟動 startActivity(Intent) Activity運行結果返回 startActivityForResult(Intent, int) setResult(int) onActivityResult(int, int, Intent),Activity的啟動及返回(續(xù)一),startActivity(Intent)接口用于啟動一個新的activity,新的activity將被放置到activity棧頂。使用一個單一的參數(shù):描述activity的執(zhí)行動作的Intent。 有時候我們希望在activity結束的時候獲得activity的反饋結果,例如:在

54、一個activity中,讓用戶在一個聯(lián)系人列表中選擇某一個人,在該頁面結束的時候,能夠返回選中的人員信息。要做到這一點,需要調(diào)用startSubActivity(Intent, int)接口進行啟動,第二個參數(shù)為調(diào)用者的標識。結果將在onActivityResult(int, int, String, Bundle)中返回。 當一個activity退出時,可以調(diào)用setResult(int)返回數(shù)據(jù)給上一級的activity。它必須支持結果編碼,可以是標準的RESULT_CANCELED, RESULT_OK,或者從RESULT_FIRST_USER開始的自定義編碼。此外,還可以返回一個字符串

55、(通常是URL的某一項數(shù)據(jù)),也可以返回一個包含任意內(nèi)容的包。所有的返回信息都會反饋到上一級的Activity.onActivityResult()接口,并帶有上一級activity提供的原始標識號。 如果一個子activity失敗了(如崩潰了),父activity將會接收到一個RESULT_CANCELED的結果編碼。,(代碼片段),public class MyActivity extends Activity static final int PICK_CONTACT_REQUEST = 0; protected boolean onKeyDown(int keyCode, KeyEve

56、nt event) if (keyCode = KeyEvent.KEYCODE_DPAD_CENTER) / When the user center presses, let them pick a contact. startActivityForResult( new Intent(Intent.ACTION_PICK, new Uri(content:/contacts), PICK_CONTACT_REQUEST); return true; return false; protected void onActivityResult(int requestCode, int res

57、ultCode, Intent data) if (requestCode = PICK_CONTACT_REQUEST) if (resultCode = RESULT_OK) / A contact was picked. Here we will just display it / to the user. startActivity(new Intent(Intent.ACTION_VIEW, data); ,保存持久狀態(tài),一般來說,activity有兩種持久狀態(tài)需要處理:共享的文檔類數(shù)據(jù)(典型的是使用了content provider存儲在SQLite中),內(nèi)在的狀態(tài)(如用戶的嗜好)

58、。 針對內(nèi)容提供的數(shù)據(jù),google建議采用“編輯到位”的用戶模型,也就是說,用戶的編輯動作是立即有效的,無須進行額外的確認步驟,支持這個模式只需要簡單遵守下面的兩個規(guī)則: 1. 當創(chuàng)建一個新的文檔時,相關的數(shù)據(jù)庫條目和文件都是立即創(chuàng)建的,例如:用戶選擇寫一個新的電子郵件,一旦開始寫,則新的電子郵件條目創(chuàng)建出來了。所以如果進入其他的activity,則這封電子郵件將會出現(xiàn)在草稿箱中。 2. 當一個activity的onPause()接口被調(diào)用時,它應該提交用戶的修改到內(nèi)容提供者或者文件中。這樣確保其他將要運行的activity能夠看到這些變化。在整個activity的生命周期中,有很多時候都需

59、要頻繁提交數(shù)據(jù),例如:在啟動一個新的 activity之前,在結束自己的activity之前,在輸入字段進行切換的時候等等。,保存持久狀態(tài)(續(xù)一),這個模型是為了防止用戶在activity之間瀏覽時的數(shù)據(jù)丟失,允許系統(tǒng)在activity停止后的任何時間里安全地殺掉activity(因為系統(tǒng)資源要用在其他地方)。注意:這樣意味著在activity里按了“返回”鍵并不等于“取消”,它意味著activity的當前數(shù)據(jù)被保存下來,離開了activity。在一個activity中要取消編輯動作必須有另外一套機制來實現(xiàn),比如一個清晰的“恢復”或者“撤銷”動作。 可以在content package里面查看更多的內(nèi)容提供者信息,有一些重要的方面,在activity調(diào)用和activity之間的數(shù)據(jù)傳遞的不同。 activity也提供了一些API用于管理內(nèi)在的狀態(tài),

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論