《Android系統(tǒng)開發(fā)》課程教學(xué)大綱_第1頁
《Android系統(tǒng)開發(fā)》課程教學(xué)大綱_第2頁
《Android系統(tǒng)開發(fā)》課程教學(xué)大綱_第3頁
《Android系統(tǒng)開發(fā)》課程教學(xué)大綱_第4頁
《Android系統(tǒng)開發(fā)》課程教學(xué)大綱_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Android系統(tǒng)開發(fā) 教學(xué)大綱一、說明(一)課程性質(zhì) 本課程為學(xué)院平臺課程,為專業(yè)選修課,由學(xué)生根據(jù)學(xué)習(xí)需要選修。(二)教學(xué)目的 本課程主要從Java基礎(chǔ)開始學(xué)習(xí),循環(huán)漸進(jìn),以培養(yǎng)移動應(yīng)用開發(fā)工程師為目標(biāo),深入講解 Android 開發(fā)方法并進(jìn)行實踐,使學(xué)生掌握移動應(yīng)用的開發(fā)流程、方法和技術(shù),提升學(xué)生的軟件開發(fā)素養(yǎng)。 (三)教學(xué)內(nèi)容 課程從項目情境出發(fā),引導(dǎo)學(xué)生學(xué)習(xí)開發(fā)。具體內(nèi)容包括:Android環(huán)境的搭 建,Android項目結(jié)構(gòu)分析,用戶界面設(shè)計,2D、3D圖形繪制,數(shù)據(jù)存儲與訪問,定位服務(wù)與地圖應(yīng)用,網(wǎng)絡(luò)編程,Android NDK開發(fā)及綜合案例。 (四)教學(xué)時數(shù) 36學(xué)時講授,36

2、學(xué)時實驗,每周4學(xué)時。合計72學(xué)時。(五)教學(xué)方式多媒體機(jī)房教學(xué)、案例導(dǎo)向、項目驅(qū)動等教學(xué)方法、啟發(fā)學(xué)生對學(xué)科知識的把握理解和實際操作能力。 課程教學(xué)方法的改革以調(diào)動學(xué)生的積極性為核心。除講授、提問、學(xué)生分析、討論等常用的方法外,結(jié)合管理課程的特點,適應(yīng)本科生培養(yǎng)的要求,探索并完善以 參與式、體驗式、交互式和模擬教學(xué)等實踐教學(xué)為基本形式的多種方法。并建立紙質(zhì)、聲音、電子、網(wǎng)絡(luò)等多種媒體構(gòu)成的立體化教學(xué)載體。 通過實訓(xùn)和案例分析,把學(xué)科理論的學(xué)習(xí)融入對經(jīng)濟(jì)活動實踐的研究和認(rèn)識之中,切實提高分析問題、解決問題的能力。二、本文理論部分第1章 Android基礎(chǔ)知識教學(xué)要點:Android 開發(fā)平臺搭

3、建Android程序開發(fā)過程教學(xué)時數(shù): 6學(xué)時教學(xué)內(nèi)容:1.1 Android概述Android 是Google開發(fā)的基于Linux平臺的開源 HYPERLINK /hy/%E6%89%8B%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F t _blank 手機(jī)操作系統(tǒng)。它包括操作系統(tǒng)、用戶界面和 HYPERLINK /hy/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F t _blank 應(yīng)用程序等移動電話工作所需的全部軟件,而且不存在任何以往阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。Google與 HYPERLINK /hy/%E5%

4、BC%80%E6%94%BE%E6%89%8B%E6%9C%BA%E8%81%94%E7%9B%9F t _blank 開放手機(jī)聯(lián)盟合作開發(fā)了 Android,這個聯(lián)盟由包括中國移動、摩托羅拉、高通、宏達(dá)電和 HYPERLINK /hy/T-Mobile t _blank T-Mobile 在內(nèi)的 30 多家技術(shù)和無線應(yīng)用的領(lǐng)軍企業(yè)組成。Google通過與運營商、設(shè)備制造商、開發(fā)商和其他有關(guān)各方結(jié)成深層次的 HYPERLINK /hy/%E5%90%88%E4%BD%9C%E4%BC%99%E4%BC%B4%E5%85%B3%E7%B3%BB t _blank 合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化

5、、開放式的移動電話軟件平臺,在移動產(chǎn)業(yè)內(nèi)形成一個開放式的生態(tài)系統(tǒng)。1.2 Android的特征1.2.1 Android系統(tǒng)平臺五大特色1.開放性2.掙脫運營商的束縛3.豐富的硬件選擇4.不受任何限制的開發(fā)商5.無縫結(jié)合的Google應(yīng)用1.2.2Android的優(yōu)勢1. Android 系統(tǒng)的穩(wěn)定性贏得了廠商的青睞 2.Android系統(tǒng)的開源特性使得廠商可以隨意打上自己的印記 3.Android系統(tǒng)的免費特性 1.3 Android環(huán)境的搭建1.3.1安裝Android SDK的最低硬件需求1.3.2 Android SDK軟件開發(fā)組件1Android Linux系統(tǒng)內(nèi)核2. Androi

6、d仿真器3.Eclipse圖形界面開發(fā)環(huán)境 4. Dalvik虛擬機(jī)器5.Android除錯工具6. Android應(yīng)用程序架構(gòu)1.3.3 Android 開發(fā)環(huán)境搭建1下載Java JDK2.Eclipse IDE 下載3.Android SDK下載器 Android的系統(tǒng)架構(gòu)教學(xué)要點:Android系統(tǒng)架構(gòu)應(yīng)用程序基本組件應(yīng)用程序生命周期資源AndroidManifest.xml文件教學(xué)時數(shù): 6學(xué)時教學(xué)內(nèi)容:2.1 Android的系統(tǒng)架構(gòu)Android作為一個移動設(shè)備的開發(fā)平臺,其系統(tǒng)架構(gòu)和其他操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖2-1看,android從高層到低層分為以下幾個層次

7、。應(yīng)用程序?qū)樱ˋpplication)應(yīng)用程序框架層(Application Framework)各種庫(Libraries)和運行環(huán)境(RunTime)linux核心層(OS)圖2-1 Android系統(tǒng)架構(gòu)圖2.1.1應(yīng)用程序(Application)Android的應(yīng)用程序通常涉及用戶界面和用戶交互,這類程序是用戶實實在在能感覺到的。Android會同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA語言編寫的。2.1.2應(yīng)用程序框架(Application Framework)普通開發(fā)者

8、可以使用Android基本應(yīng)用程序使用的系統(tǒng)API,Android 應(yīng)用框架中的各個模塊都可以被復(fù)用,各種服務(wù)也可以被復(fù)用,理解了這個機(jī)制,開發(fā)人員可以更好更輕松地開發(fā)出優(yōu)秀的Android應(yīng)用。開發(fā)過程中常用到的基本框架組件如下:一組View(UI 組件),這些UI組件包括Button(按鈕),EidtView(文本框),TextView(標(biāo)簽),List(列表)等等,靈活運用這些組件可以快速方便的創(chuàng)建良好的用戶交互界面。Content Providers(內(nèi)容提供者),聽起來有點抽象,通俗的理解Content Provider 就是提供一種服務(wù),通過這種服務(wù)應(yīng)用程序之間可以實現(xiàn)數(shù)據(jù)的互相訪

9、問和共享,比如通訊錄的存儲就使用了這種服務(wù),其它應(yīng)用也可以訪問通訊錄中存儲的聯(lián)系人信息。Resource Manager 顧名思義就是資源管理,android中的資源很多,包括圖片,用戶界面(Layout xml),字體,顏色,UI組件的Id等等都可以稱之為資源,這些豐富的資源,都是通過Resource Manager來統(tǒng)一進(jìn)行管理。Notification Manager(消息通知管理),它在不影響用戶正常操作和使用設(shè)備的時候在狀態(tài)欄上提供消息的提示。比如有短信來的時候,android自動會將這個消息提示在狀態(tài)欄上,用戶可以及時的看到。Activity Manager(活動管理),Activ

10、ity管理著應(yīng)用程序的生命周期,并且控制著應(yīng)用的導(dǎo)航,扮演控制器的角色。每個Activity類似于Windows應(yīng)用中的一個wendow。一般的應(yīng)用都是通過一個個Activity交互構(gòu)成的。Window Manager(窗口管理),管理所有啟動的窗口。Location Manager(位置管理),用來管理地圖服務(wù)的相關(guān)功能。Telephoney Manager(電話管理),用來管理有關(guān)的電話的相關(guān)功能。Package Manager(包管理),管理所有的安裝在android系統(tǒng)內(nèi)的應(yīng)用程序。2.1.3 各種庫(Libraries)和運行環(huán)境(RunTime)這部分內(nèi)容開始涉及底層,開發(fā)普通的應(yīng)

11、用不會直接對這個層進(jìn)行操作。以下是一些核心庫。系統(tǒng)C庫(libc),一個從BSD集成來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(libc)它是專門為基于嵌入式Linux的設(shè)備定制的。媒體庫(Media Framework),基于PackeVideo OpenCore,該庫支持多種常用的音頻,視頻格式以及回放和錄制,同時支持靜態(tài)圖像文件。編碼格式包括:MPEG4、H.264,MP3、AAC、AMR、JPG、PNG。Surface Manager 對顯示子系統(tǒng)的管理,并且為多個應(yīng)用提供2D,3D圖層的無縫融合。WebKit,一個最新的web瀏覽器引擎,用來支持Andiroid瀏覽器或者嵌入的web視圖。SGL, 底層的

12、2D圖形引擎。OPENGL|ES,基于OpenGL ES 1.0 APIs實現(xiàn),該庫可以使用硬件3D加速或者使用高度優(yōu)化的3D軟加速。FreeType,位圖(bitmap)和適量(vector)字圖顯示支持。SQLite,一個對所有應(yīng)用程序可用,功能強(qiáng)大的輕量級關(guān)系型數(shù)據(jù)庫引擎。Core Libraries 該核心庫提供了Java編程語言核心庫的大多數(shù)功能。Dalvik VM, android平臺的一個虛擬機(jī),它相當(dāng)于PC中Java的虛擬機(jī)JVM。Android 的各種庫一般是以系統(tǒng)中間件的形式提供的,它們均有的一個顯著特點就是與移動設(shè)備的平臺的應(yīng)用密切相關(guān)。Android運行環(huán)境主要指的虛擬

13、機(jī)技術(shù)Dalvik。Dalvik虛擬機(jī)和一般Java虛擬機(jī)(Java VM)不同,它執(zhí)行的不是Java標(biāo)準(zhǔn)的字節(jié)碼,而是Dalvik可執(zhí)行格式(.dex)的執(zhí)行文件。在執(zhí)行過程中,每一個應(yīng)用程序即一個進(jìn)程(Linux的一個Process)。二者最大的區(qū)別在于Java VM是以基于棧的虛擬機(jī)(Stack-based),而Dalvik是基于寄存器的虛擬機(jī)(Register-based)。顯然,后者最大的好處在于可以根據(jù)硬件實現(xiàn)更大的優(yōu)化,這更適合移動設(shè)備的特點。Dalvik虛擬機(jī)依賴于linux內(nèi)核的一些功能,比如線程機(jī)制和底層內(nèi)存管理機(jī)制。2.1.4 Linux 內(nèi)核Android 的核心系統(tǒng)服

14、務(wù)依賴于 Linux 2.6 內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理, 網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型。 Linux 內(nèi)核也同時作為硬件和軟件之間的抽象層,使得應(yīng)用程序開發(fā)人員無需關(guān)心硬件細(xì)節(jié)。對于手機(jī)的開發(fā)商而言,如果想要Android平臺運行到自己的硬件平臺上就必須對Linux內(nèi)核進(jìn)行修改,通常要做的工作是為自己的硬件編寫驅(qū)動程序。2.2應(yīng)用程序的基本組件應(yīng)用程序五大組件。1. Activity2. Service3. Broadcast Receiver4. Content Provider5Intent然而,并不是所有的應(yīng)用程序都必須包含上面的五個部分,你的應(yīng)用程序可以由上面的一個或幾個來組建。當(dāng)你

15、決定使用以上哪些組件來構(gòu)建Android應(yīng)用程序時,你應(yīng)該將它們列在AndroidManifest.xml文件中,在這個文件中你可以聲明應(yīng)用程序組件以及它們的特性和要求。2.2.1 Activity 簡介在Android程序中Activity代表了手機(jī)的一個屏幕,好比A應(yīng)用中的一個網(wǎng)頁,一個android應(yīng)用相當(dāng)于一個web站點。窗口中的可視內(nèi)容被一系列層次的視圖(view)提供派生自 HYPERLINK /reference/android/view/View.html t _blank View類的對象(后續(xù)章節(jié)會詳細(xì)介紹)。視圖就是 activity與用戶交互的地方。例如,當(dāng)用戶觸動一個

16、顯示小圖片的視圖時,會觸發(fā)一些動作。Android提供了很多現(xiàn)成的視圖供你使用包括按鈕,文本框,滾動條,菜單項,復(fù)選框還有更多。整個視圖層次通過 HYPERLINK /reference/android/app/Activity.html l setContentView%28android.view.View%29 t _blank Activity.setContentView()方法放到 activity的窗口上。下圖2-2顯示了View的層次結(jié)構(gòu)。圖2-2 View的層次結(jié)構(gòu)圖當(dāng)一個新的屏幕打開后,前一個屏幕將會暫停,并保存在歷史堆棧中。用戶可以返回到歷史堆棧中的前一個屏幕。當(dāng)屏幕不再

17、使用時,還可以從歷史堆棧中刪除。默認(rèn)情況下,Android 將會保留從主屏幕到每一個應(yīng)用的運行屏幕。同一應(yīng)用中的每個 Activity 是相互獨立的。程序啟動后顯示的第一幅畫面是應(yīng)用程序的第一個 Activity (默認(rèn)窗口),而后可以根據(jù)需要從這個 Activity 啟動另一個新的 Activity 。每一個都是作為Activity基類的一個子類的實現(xiàn)。有兩個方法是幾乎所有的Activity子類都實現(xiàn)的:(1)onCreate(Bundle):初始化你的活動(Activity),比如完成一些圖形的繪制。最重要的是,在這個方法里你通常將用布局資源(layout resource)調(diào)用setCo

18、ntentView(int)方法定義你的UI,和用findViewById(int)在你的UI中檢索你需要編程地交互的小部件(widgets)。setContentView指定由哪個文件指定布局(main.xml),可以將這個界面顯示出來,然后我們進(jìn)行相關(guān)操作,我們的操作會被包裝成為一個意圖(Intent),然后這個意圖對應(yīng)有相關(guān)的activity進(jìn)行處理。(2)onPause():處理當(dāng)離開你的活動時要做的事情。最重要的是,用戶做的所有改變應(yīng)該在這里提交(通常ContentProvider保存數(shù)據(jù))。2.2.2 Service 簡介Service沒有可見的用戶界面,但能夠長時間運行于后臺。一

19、個最好的例子是媒體播放器通過一個播放列表來播放歌曲。這個播放器程序或許有一個或多個activity,來允許用戶選擇音樂和播放它們。然而,音樂本身不能被activity處理,因為用戶希望當(dāng)他們離開播放器窗口去做其他的事情時,音樂仍然能夠播放。為了讓音樂能夠繼續(xù),媒體播放器的 activity可以啟動一個在后臺運行的服務(wù)。系統(tǒng)應(yīng)該保證音樂服務(wù)運行,即使啟動的activity窗口已經(jīng)不在主屏幕上了。所以,我們需要這樣的機(jī)制長時間在后臺運行的Service。Service運行于應(yīng)用程序進(jìn)程的主線程中,因此Service不會阻塞其他組件和用戶界面。Service是不能自己啟動的,必須通過Context對

20、象(如一個Activity)調(diào)用startService或bindService方法來啟動(用這兩種方法啟動的Service的生命周期不同)。2.2.3 Broadcast Receiver 簡介Broadcast Receiver是對發(fā)送出來的Broadcast進(jìn)行過濾接收并響應(yīng)的一類組件。廣播是一種同時通知多個對象的事件通知機(jī)制。Android中的廣播要么來自于系統(tǒng),要么來自普通應(yīng)用程序。很多事件都可能導(dǎo)致系統(tǒng)廣播,如手機(jī)所在時區(qū)發(fā)生變化,電池電量低,用戶改變系統(tǒng)語言設(shè)置等。來自普通應(yīng)用程序,如一個應(yīng)用程序通知其他應(yīng)用程序某些數(shù)據(jù)已經(jīng)下載完畢。為了響應(yīng)不同的事件通知,應(yīng)用程序可以注冊不同的

21、Broadcast Receiver。所有的Broadcast Receiver都繼承自基類BroadcastReceiver。BroadcastReceiver自身并不實現(xiàn)圖形用戶界面,但是當(dāng)它收到某個通知后,BroadcastReceiver可以啟動Activity作為響應(yīng),或者通過NotificationMananger提醒用戶。2.2.4 Content Provider 簡介 在Android中,每個應(yīng)用程序都是用自己的用戶ID并在自己的進(jìn)程中運行。這樣的好處是,可以有效地保護(hù)系統(tǒng)及應(yīng)用程序,避免被其他不正常德應(yīng)用程序所影響,每個進(jìn)程都擁有獨立的進(jìn)程地址空間和虛擬空間。Content

22、 Provider可以將應(yīng)用程序特定的數(shù)據(jù)提供給另一個應(yīng)用程序使用。其數(shù)據(jù)存儲方式可以是Android文件系統(tǒng)、SQLite數(shù)據(jù)庫或者其他合理的方式。當(dāng)數(shù)據(jù)需要在應(yīng)用程序間共享時,我們就可以利用ContentProvider為數(shù)據(jù)定義一個URI。之后,其他應(yīng)用程序?qū)?shù)據(jù)進(jìn)行查詢或者修改時,只需要從當(dāng)前上下文對象獲得一個ContentResolver,然后傳入響應(yīng)的URI就可以了。Content Provider繼承自基類ContentProvider,并且實現(xiàn)了一組標(biāo)準(zhǔn)接口。通過這組接口,其他應(yīng)用程序能對數(shù)據(jù)進(jìn)行讀寫和存儲。然而,需要使用數(shù)據(jù)的應(yīng)用程序并不是直接調(diào)用這組方法,而是通過調(diào)用Con

23、tentResolver對象的方法來完成。ContentResolver對象可以與任意ContentProvider通信。要為當(dāng)前應(yīng)用程序的私有數(shù)據(jù)定義URI,就需要專門定義一個繼承自ContentProvider的類,然后根據(jù)不同的操作調(diào)用的方法去實現(xiàn)這些方法的功能。ContentResolver類為應(yīng)用程序提供了接入Content機(jī)制的方法。要構(gòu)造一個ContentResolver對象可以為構(gòu)造方法ContentResolver(Context context)傳入一個Context對象,也可以直接通過Context對象調(diào)用getContentResolver()方法獲得有了Content

24、Resolver對象后,就可以通過調(diào)用其query()、insert()、update()等方法來對數(shù)據(jù)進(jìn)行操作了。2.2.5 Intents連接組件的紐帶以上4種基本組件中,除了Content Provider是通過Content Resolver激活外,其他3種組件Activity、Service和Broadcast Receiver都是由Intent異步消息激活的。Intent在不同的組件之間傳遞消息,將一個組件的請求意圖傳給另一個組件。因此,Intent是包含具體請求信息的對象。針對不同的組件,Intent所包含的消息內(nèi)容有所不同,且不同組件的激活方式也不同,且不同類型組件有傳遞Int

25、ent的不同方式。Intent是一種運行時綁定(runtime binding)機(jī)制,它能夠在程序運行的過程中連接兩個不同的組件。通過Intent,你的程序可以向Android表到某種請求或者意愿,Android會根據(jù)意愿的內(nèi)容選擇適當(dāng)?shù)慕M件來處理請求。對于Intent更深入的介紹在后續(xù)章節(jié)中。2.3 應(yīng)用程序生命周期2.3.1應(yīng)用程序的生命周期應(yīng)用程序的生命周期是在Android系統(tǒng)中進(jìn)程從啟動到終止的所有階段,也就是Android從啟動到停止的全過程。Android應(yīng)用程序的生命周期的終結(jié)這個動作并非由應(yīng)用程序進(jìn)程本身執(zhí)行,而是取決于Android系統(tǒng)。那么,系統(tǒng)是根據(jù)一個怎樣的重要性標(biāo)準(zhǔn)

26、來終止Android應(yīng)用程序呢?Android根據(jù)應(yīng)用程序的組件以及組件當(dāng)前運行狀態(tài)將所有的進(jìn)程按重要性程度從高到低劃分為五個,如下圖2-6所示:圖2-6 Android進(jìn)程的優(yōu)先級1.前臺進(jìn)程前臺進(jìn)程是Android系統(tǒng)中最重要的進(jìn)程,是與用戶正在進(jìn)行交互的進(jìn)程。有以下四種情況。Activity正在與用戶進(jìn)行交互進(jìn)程被Activity調(diào)用,而且這個進(jìn)程正在與用戶進(jìn)行交互進(jìn)程服務(wù)正在執(zhí)行聲明中的回調(diào)函數(shù),如OnCreate()OnStart()OnDestroy()進(jìn)程的BroadCastReceiver在執(zhí)行OnReceive()函數(shù)Android系統(tǒng)在多個前臺進(jìn)程同時運行時,可能會出現(xiàn)資源

27、不足的情況,此時會清除部分前臺進(jìn)程,保證主要的用戶界面能夠及時響應(yīng)。2.可見進(jìn)程可見進(jìn)程是指部分程序界面能夠被用戶看見,卻不在前臺與用戶交互,不影響界面事件的進(jìn)程。一個常見的例子是,看見進(jìn)程的窗口顯示在屏幕上,同時前臺進(jìn)程以對話框的形式懸浮在可見進(jìn)程的窗口上。如果一個進(jìn)程包含服務(wù),且這個服務(wù)正被用戶可見的Activity調(diào)用,此進(jìn)程同樣被視為可見進(jìn)程。Android進(jìn)程一般存在少量的可見進(jìn)程,只有在特殊情況下,Android系統(tǒng)才會為保證前臺進(jìn)程的資源而清除可見進(jìn)程。3.服務(wù)進(jìn)程服務(wù)進(jìn)程是指包含已啟動Service(服務(wù))的進(jìn)程。這些進(jìn)程沒有用戶界面并且在后臺長期運行。Android系統(tǒng)除非不

28、能保證前臺進(jìn)程和可見進(jìn)程所必要的資源,否則不強(qiáng)行清除服務(wù)進(jìn)程。4.后臺進(jìn)程后臺進(jìn)程是指不包括任何已經(jīng)啟動的Service(服務(wù)),而其沒有任何用戶可見的Activity的進(jìn)程。Android系統(tǒng)中一般存在數(shù)量較多的后臺進(jìn)程,在系統(tǒng)資源緊張時,系統(tǒng)將優(yōu)先清除用戶較長時間沒有見到的后臺進(jìn)程。5.空進(jìn)程空進(jìn)程是不包含任何Activity的進(jìn)程。這種進(jìn)程存在的唯一理由是提供一種緩存機(jī)制,使得縮短應(yīng)用程序下次啟動所需的時間。系統(tǒng)會經(jīng)常中止空進(jìn)程,從而達(dá)到調(diào)節(jié)程序緩存和系統(tǒng)緩存的平衡??者M(jìn)程在系統(tǒng)緊張時會被首先清除。除了以上優(yōu)先級以外,以下兩個方面也決定了優(yōu)先級。進(jìn)程的優(yōu)先級取決于所有組件中優(yōu)先級最高的部

29、分。進(jìn)程的優(yōu)先級會根據(jù)其他進(jìn)程的依賴關(guān)系而變化。2.3.2 Actvity生命周期每個Actvity的狀態(tài)由它所在Activity棧中的位置所決定,所有當(dāng)前正在運行的Actvity將遵循后進(jìn)先出的原則。當(dāng)一個新的 Activity啟動,當(dāng)前的Activity將移至堆棧的頂部,如果用戶使用Back按鈕,或在前臺Activity被關(guān)閉,下一個Activity將被激活并且移至到堆棧的頂部。這個過程如下圖2-7所示:圖2-7 Activity堆棧圖隨著Activity的創(chuàng)建和銷毀,可能會經(jīng)歷以下四種狀態(tài):Active(活躍)狀態(tài):這時候Activity處于棧頂,且是可見的,有焦點的,能夠接收用戶輸入。

30、Android會盡可能維持處于活躍狀態(tài)的Activity,甚至中止其他Activity以確保它有它所需的資源。當(dāng)另一個Activity變成Active時,當(dāng)前的將變成Paused狀態(tài)。Paused(暫停)狀態(tài):在某些情況下,你的Activity是可見的,但沒有焦點,在這時候,Actvity處于Paused狀態(tài)。例如,你的 Activity處于暫停狀態(tài),有一個透明或非全屏幕上的Activity在你的Actvity上面。當(dāng)處于Paused狀態(tài)時,該Activity仍被認(rèn)為是Active的,但是它不接受用戶輸入事件。一般情況下,Android不會結(jié)束處于暫停狀態(tài)的Activity,在極端情況下,如果

31、資源極其不足,系統(tǒng)將結(jié)束暫停的Activity,以進(jìn)一步回收資源。當(dāng)一個Actvity完全被遮住時,它將進(jìn)入Stopped狀態(tài)。Stopped (結(jié)束)狀態(tài):當(dāng)Activity是不可見的時,Activity處于Stopped狀態(tài)。Activity將繼續(xù)保留在內(nèi)存中保持當(dāng)前的所有狀態(tài)和成員信息,假設(shè)系統(tǒng)別的地方需要內(nèi)存的話,這時它是被回收對象的主要候選。Inactive(已被銷毀或未啟動)狀態(tài):Activity徹底結(jié)束或關(guān)閉后,處于Inactive狀態(tài)。這時Activity從Activity堆棧中已被移除,需要重新啟動才可以顯示和使用。Activity的生命周期是指一個Activity從創(chuàng)建到銷

32、毀的過程,期間可能經(jīng)歷多個狀態(tài)的變化遷移,每次狀態(tài)遷移都會觸發(fā)相應(yīng)的回調(diào)方法。以下就是Activity的回調(diào)方法:onCreateonStartonRestartonResumeonPauseonStoponDestroy我們還可以把以上7種狀態(tài)歸納為三組。完整的生命周期可見的生命周期活躍的生命周期表2-1給出了三種生命周期所對應(yīng)的回調(diào)函數(shù)。表2-1 三種生命周期所對應(yīng)的回調(diào)函數(shù)生命周期函數(shù)描述完整的生命周期onCreate()onDestroy()進(jìn)程的生命周期,只要進(jìn)程還在,這個生命就沒有死亡,進(jìn)程啟動時onCreate()函數(shù)被調(diào)用,onDestory()進(jìn)程結(jié)束??梢姷纳芷趏nSt

33、art()onStop()可見的生命周期,顧名思義,在用戶界面上顯示該activity時,onStart()被調(diào)用,該activity從用戶界面消失時,onStop()被調(diào)用?;钴S的生命周期onResume()onPause()活躍的生命周期,當(dāng)該activit在所有activity最前面,即棧頂時,onResume()被調(diào)用,當(dāng)activit被其他activity覆蓋,onPause()被調(diào)用。Activity完整的生命周期完整的Activity生命周期之間從調(diào)用的OnCreate開始,到調(diào)用onDestroy結(jié)束。有可能在某些情況下,一個Activity被終止時并不調(diào)用onDestroy方

34、法。使用OnCreate方法來初始化你的Activity:初始化的用戶界面,分配引用類變量,綁定數(shù)據(jù)控件,并創(chuàng)建服務(wù)和線程。在OnCreate方法傳遞的對象Bundle包含最后一次調(diào)用onSaveInstanceState保存的UI狀態(tài)。你可以使用這個Bundle恢復(fù)用戶界面到以前的狀態(tài),無論是OnCreate方法或通過覆蓋onRestoreInstanceStateMethod方法。覆蓋onDestroy方法來清理OnCreate中創(chuàng)建的任何資源,并確保所有外部連接被關(guān)閉,例如網(wǎng)絡(luò)或數(shù)據(jù)庫連接。為了避免創(chuàng)造短期對象和增加垃圾收集的時間,以致對用戶體驗產(chǎn)生直接影響。如果你的Activity需要

35、創(chuàng)建一些對象的話,最好在onCreate方法中創(chuàng)建,因為它僅調(diào)用一次在一個Actvity的完整生命周期中。Activity可見的生命周期一個Activity可見的生命周期始于OnStart調(diào)用,結(jié)束于OnStop調(diào)用。在這兩個方法中間, Activity將會對用戶是可見的,盡管它可能沒有焦點,也可能部分被遮擋著。在一個Activity完整的生命周期中可能會經(jīng)過幾個Activity可見的生命周期,比如應(yīng)用程序在在前臺和后臺之間反復(fù)切換。OnStop方法用于暫?;蛲V箘赢?,線程,定時器,服務(wù)或其他專門用于更新用戶界面程序。當(dāng)用戶界面是再次可見時,使用OnStart(或onRestart)方法來恢復(fù)

36、或重新啟動這些程序。當(dāng)一個Activity被重現(xiàn)可見時,onRestart方法優(yōu)先于onStart被調(diào)用,使用它可以實現(xiàn)一些Activity重新可見時的特殊的處理。OnStart / OnStop方法也被用來注冊和注銷BroadercastReceiver。Activity活躍的生命周期一個Activity活躍的生命周期始于OnResume調(diào)用,結(jié)束于OnPause調(diào)用。一個活躍的Activity總是在前臺并且接收用戶的輸入事件。當(dāng)一個新的Activity啟動,或該設(shè)備進(jìn)入休眠狀態(tài),或失去焦點,Activity活躍的生命周期就結(jié)束了。盡量在onPause和onResume方法中執(zhí)行簡潔的代碼以

37、確保應(yīng)用程序能夠快速響應(yīng)Activity在前臺和后臺之間切換。在調(diào)用onPause之前,onSaveInstanceState會被調(diào)用。這個方法提供了一個機(jī)會保存當(dāng)前的UI狀態(tài)到Bundle當(dāng)中。 Bundle信息將會被傳遞到OnCreate和onRestoreInstanceState方法。使用onSaveInstanceState保存 UI狀態(tài)(如檢查按鈕狀態(tài),用戶焦點,未提交用戶輸入)能夠確保當(dāng)Activity下次被激活時能呈現(xiàn)和目前相同的用戶界面。下面圖2-8給出了activity生命周期中可能經(jīng)歷的狀態(tài)變化。圖2-8 activity生命周期中可能經(jīng)歷的狀態(tài)變化2.4 資源Andro

38、id資源是應(yīng)用程序的資產(chǎn)(包括圖像、本地化字符串、XML布局等),資源是外部文件(不含代碼的文件),它被代碼使用并在編譯時編入應(yīng)用程序??纯吹谝粋€例子HelloAndroid源代碼目錄,有一個是res的目錄,它存放的就是應(yīng)用程序需要的各種資源。2.4.1 創(chuàng)建、管理資源Android支持不同類型的資源文件,包括XML,PNG以及JPEG文件。每個對象語法、格式以及它們存儲位置的支持,都是取決于不同類型的對象。通常,可以通過三種類型的文件來創(chuàng)建資源:XML文件(除位圖以及原數(shù)據(jù)文件)、位圖文件(對于圖片)以及原始數(shù)據(jù)(其他類型,例如聲音文件等)。事實上,有兩種不同類型的XML文件,一種是編譯到包

39、里的,另一種是通過aapt來產(chǎn)生的資源文件,下面是包含所有資源類型,文件格式、文件描述以及所有XML文件的詳細(xì)信息的列表。表2-2 資源類型列表目錄資源類型res/anim/XML文件,它們被編譯進(jìn)逐幀動畫( HYPERLINK /guide/topics/resources/available-resources.html l animationdrawable t _blank frame by frame animation)或補間動畫( HYPERLINK /guide/topics/resources/available-resources.html l tweenedanimati

40、on t _blank tweened animation)對象res/drawable/.png、.9.png、.jpg格式的圖片文件res/layout/被編譯為屏幕布局(或屏幕的一部分)的XML文件res/values/可以被編譯成很多種類型的資源的XML文件。盡管這個文件夾里的文件可以任意命名,不過下面是一些比較典型的文件(文件命名的慣例是將元素類型包含在該名稱之中):array.xml定義數(shù)組colors.xml定義 HYPERLINK /android/reference/available-resources.html l colordrawableresources t _bl

41、ank color drawable和 HYPERLINK /android/devel/resources-i18n.html l colorvals t _blank 顏色的字符串值(color string values)。使用Resource.getDrawable()和Resources.getColor()分別獲得這些資源。dimens.xml定義 HYPERLINK /android/reference/available-resources.html l dimension t _blank 尺寸值(dimension value)。使用Resources.getDimensi

42、on()獲得這些資源。strings.xml定義 HYPERLINK /android/reference/available-resources.html l stringresources t _blank 字符串(string)值。使用Resources.getString()或者Resources.getText()獲取這些資源。getText()會保留在UI字符串上應(yīng)用的豐富的文本樣式。styles.xml定義 HYPERLINK /android/reference/available-resources.html l stylesandthemes t _blank 樣式(sty

43、le)對象。res/xml/任意的XML文件,在運行時可以通過調(diào)用 HYPERLINK /android/reference/android/content/Resources.html l getXml%28int%29 t _blank Resources.getXML()讀取。res/raw/直接復(fù)制到設(shè)備中的任意文件。res/assets/要使用這些資源,可以調(diào)用 HYPERLINK /android/reference/android/content/Resources.html l openRawResource%28int%29 t _blank Resources.openRa

44、wResource(),參數(shù)是資源的ID,即R.raw.somefilename。assets下也可以放置任意文件,使用 Activity.this.getAssets().open(*.txt);打開。資源最終會被編譯成.apk文件,Android創(chuàng)建一個封裝類,命名為R,這樣開發(fā)者可以在代碼里使用這些資源類。2.4.2 使用資源使用資源包括三種方法:在代碼里使用資源類;在代碼中調(diào)用資源并實例化;從其他資源類里引用,這樣可以重用通用資源。上一節(jié)提到的R類,它指向應(yīng)用程序中所有的資源。這個類包含很多子類。每一種都是Android支持的,同時在編譯后會產(chǎn)生一個資源文件。每個類提供一個或多個編譯資

45、源的標(biāo)識符,開發(fā)者可以在代碼中使用這些標(biāo)識符。注意:這個R類是自動產(chǎn)生的,不能通過手工編寫。當(dāng)資源變化時,它會自動更新。2.4.3資源的創(chuàng)建管理和使用。1.創(chuàng)建一名稱為“resourcedemo”的工程,創(chuàng)建完工程后,在Eclipse中定位至/res/values/strings.xml文件,雙擊編輯它。代碼如下: Hello resourcedemo 資源創(chuàng)建的例子其中:資源創(chuàng)建的例子是自己添加的資源。2.保存Strings.xml文件。Eclipse插件將自動在工程中生成R.java文件,并含有適當(dāng)?shù)馁Y源ID,以供編譯之后使用程序訪問這些資源。定位到/gen/目錄下的R.java文件,你可

46、以看到如下代碼:package com.resource;public final class R public static final class attr public static final class drawable public static final int icon=0 x7f020000; public static final class layout public static final int main=0 x7f030000; public static final class string public static final int app_name=0

47、 x7f040001; public static final int example=0 x7f040002; public static final int hello=0 x7f040000; 3. 創(chuàng)建好資源并保存后,可以在程序使用資源。定位到/res/layout/main.xml,雙擊編輯代碼,如下所示:其中android:text=string/example是添加的新代碼,意思是定義text的內(nèi)容為string類別下的資源,名字叫做example,內(nèi)容為“資源創(chuàng)建的例子”。4.運行程序,結(jié)果如下圖所示:圖2-12 資源創(chuàng)建并使用的運行結(jié)果2.5 AndroidManifest.

48、xml 文件2.5.1 AndroidManifest.xml 的文件組織結(jié)構(gòu) 每個Android的application都必須包含一個AndroidManifest.xml,且文件名是固定的,不能修改。應(yīng)用程序需要通過它向Android系統(tǒng)提供一些必需的信息,且需要在application運行前提供給系統(tǒng),如下圖2-13所示:圖2-13 Android應(yīng)用程序的組件AndroidManifest.xml主要包含以下功能:說明application的java 數(shù)據(jù)包,數(shù)據(jù)包名是application的唯一標(biāo)識;描述application的component;說明application的comp

49、onent運行在哪個process下;聲明application所必須具備的權(quán)限,用以訪問受保護(hù)的部分API,以及與其他application的交互;聲明application其他的必備權(quán)限,用以component之間的交互;列舉application運行時需要的環(huán)境配置信息,這些聲明信息只在程序開發(fā)和測試時存在,發(fā)布前將被刪除;聲明application所需要的Android API的最低版本級別,比如1.0,1.1,1.5;列舉application所需要鏈接的庫。AndroidManifest.xml的結(jié)構(gòu)和規(guī)則:元素:在所有的元素中只有和是必需的,且只能出現(xiàn)一次。如果一個元素包含有其他

50、子元素,必須通過子元素的屬性來設(shè)置其值。處于同一層次的元素,這些元素的說明是沒有順序的。屬性:按照常理,所有的屬性都是可選的,但是有些屬性是必須設(shè)置的。那些真正可選的屬性,即使不存在,其也有默認(rèn)的數(shù)值項說明。除了根元素的屬性,所有其他元素屬性的名字都是以android:為前綴的。定義類名:所有的元素名都對應(yīng)其在SDK中的類名,如果你自己定義類名,必須包含類的數(shù)據(jù)包名,如果類與application處于同一數(shù)據(jù)包中,可以直接簡寫為“.”。多數(shù)值項:如果某個元素有超過一個數(shù)值,這個元素必須通過重復(fù)的方式來說明其某個屬性具有多個數(shù)值項,且不能將多個數(shù)值項一次性說明在一個屬性中。資源項說明:當(dāng)需要引用

51、某個資源時,其采用如下格式:package:type:name。例如 。字符串值:類似于其他語言,如果字符中包含有字符“”,則必須使用轉(zhuǎn)義字符“”。2.5.2 在AndroidManifest.xml 中聲明權(quán)限 權(quán)限聲明在智能手機(jī)中是一種比較常見的應(yīng)用程序保護(hù)機(jī)制,其基本思想是通過AndroidManifest.xml文件中顯式地聲明應(yīng)用程序需要的權(quán)限,防止應(yīng)用程序錯誤地使用服務(wù),不恰當(dāng)訪問資源,最終達(dá)到提高Android應(yīng)用程序的健壯性,改善用戶體驗的目的。 Android中每種權(quán)限都用一個獨立的標(biāo)簽表示,如:android.permission.SEND_SMS,android.perm

52、ission.CALL_PHONE。如果需要使用發(fā)短信的權(quán)限,應(yīng)使用如下標(biāo)簽:。Android系統(tǒng)定義的所有權(quán)限可以在類Manifest.permission中找到。需要注意的是,在Manifest.permission類中表示發(fā)短信權(quán)限的變量是SEND_SMS,用戶在AndroidManifest.xml中聲明使用權(quán)限是應(yīng)在SEND_SMS前加上前綴android.permission。除了Android自帶的權(quán)限以外,應(yīng)用程序還可以對自己的組件進(jìn)行權(quán)限聲明,以保護(hù)其他應(yīng)用程序不亂用自己的組件。聲明本組件被其他組件調(diào)用時的權(quán)限,使用如下標(biāo)簽:。2.5.3通過helloWord程序認(rèn)知Andr

53、oidManifest.xml文件。在第一章我們編寫了一個簡單的Android程序Hello Android。我們按照建立這個應(yīng)用程序的步驟再建立一個程序HelloWorld,幾乎一模一樣,就是名稱變了。具體步驟參考第一章。項目建立完可以看到如下目錄結(jié)構(gòu),其中有AndroidManifest.xml文件。圖2-14 HelloWorld項目的目錄結(jié)構(gòu)下面是AndroidManifest.xml文件的代碼: 代碼解釋:文件中,除去頭部XML信息說明,首先是manifest項根節(jié)點,其屬性包括:schemas URL地址、包名(moandroid.flashlight),以及程序的版本說明。其次是

54、manifest的子節(jié)點application,其屬性包括:程序圖標(biāo)、程序名稱。前面帶有表示引用資源,例如:drawable/icon表示引用的是drawable資源中的icon,可以在其源工程的res/drawable中找到。然后就是application的子節(jié)點activity,其屬性包括:activity的名稱、activity的標(biāo)簽名,其子節(jié)點intent-filter則是對activity的說明。而在intent-filter中,action android:name=”ent.action.MAIN”和category android:name=”ent.category.LAUN

55、CHER”用以說明程序啟動時的入口activity是哪個。如果這兩個屬性值中分別含有MAIN和LAUNCHER,則說明它就是啟動程序時的入口活動。uses-sdk android:minSdkVersion=”2說明程序使用的Android SDK的最低版本,其中1表示Android 1.0,2表示Android 1.1,而3則表示Android 1.5。在Eclipse中創(chuàng)建工程后,會自動生成一個AndroidManifest.xml文件。在代碼編寫的過程中,需要同時修改AndroidManifest.xml,如果配置出現(xiàn)錯誤會導(dǎo)致程序不能正常運行。其他更為詳細(xì)的元素、屬性以及值的說明,可查

56、閱Android SDK開發(fā)指南中的詳細(xì)內(nèi)容。第3章 Android用戶界面教學(xué)要點:各種用戶界面的控件的使用方法。界面布局的特點和使用方法。菜單的使用方法。按鍵事件和觸摸事件的處理教學(xué)時數(shù): 6學(xué)時教學(xué)內(nèi)容:3.1 用戶界面基礎(chǔ)用戶界面(User Interface,UI)是系統(tǒng)和用戶之間進(jìn)行信息交互的橋梁。在Android中的用戶界面通常采用兩種方式來創(chuàng)建:一種是編寫XML代碼文件;另外一種是直接在源代碼文件中編寫控件語句。Android用戶界面框架中的界面元素主要有View類對象和ViewGroup類對象兩種。講解視圖樹。3.2 界面控件在Android系的Widget包中提供了諸如文本

57、框 (Textview),按鈕(Button),圖像按鈕(ImageButton),列表 (List),編輯框 (EditText),單選按鈕(RadioButton),復(fù)選按鈕(CheckBox),下拉列表(Spinner )等一系列已經(jīng)封裝好的界面控件和功能控件。3.2.1 TextView 與EditTextTextView是一種用來顯示文本標(biāo)簽的控件,EditText是一種用來輸入和編輯文本的控件。通過程序案例代碼,以xml方式給出了TextView 與EditText的使用方法。3.1.2 Botton和ImageButton一種是普通的按鈕(Button),另外一種能夠顯示圖像的按

58、鈕(ImageButton)。通過在例題LX3_1中添加Button和ImageButton后的工程LX3_2來了解一下兩種按鈕的使用。詳見案例LX3_2。3.1.3 CheckBox和RadioButtonAndroid系統(tǒng)中提供了單項選擇的控件RadioButton和多項選擇的控件CheckBox。RadioButton控件由選項文本和選項圓點組成,在定義多個單項選項時,由RadioButton和RadioGroup組合起來共同完成。CheckBox控件由選項文本和選項方框組成,在使用時,可以實現(xiàn)同時選擇多項的功能。3.1.4 SpinnerSpinner是一種下拉列表形式的,能夠從多個選

59、項中選擇一個選項的控件。通常與包含選項內(nèi)容的ArrayAdapter適配器對象相結(jié)合。3.1.5 ListViewListView是一種在屏幕上顯示選項的列表控件,通過適配器將顯示數(shù)據(jù)選項和自身綁定,選項過多超出顯示區(qū)域的范圍時,會出現(xiàn)垂直滾動條。3.1.6 TabHostTab標(biāo)簽頁是一種可以實現(xiàn)多個分頁之間的快速切換,每個分頁顯示不同內(nèi)容的控件。使用Tab組件的步驟說明如下。1.在布局文件中使用FrameLayout列出Tab組件及Tab中的內(nèi)容組件。2.Activity要繼承TabActivity。3.調(diào)用TabActivity的getTabHost()方法獲得TabHost對象。4.通

60、過TabHos創(chuàng)建Tab選項。3.3界面布局3.3.1 線性布局線性布局(LinearLayout)是一種比較常用且簡單的布局方式。在這種布局中,所有的子元素都是按照垂直或水平的順序排列在界面上。如果是垂直排列,每個子元素占一行,如果是水平排列,則每個子元素占一列。線性布局可以支持布局樣式嵌套實現(xiàn)復(fù)雜的布局樣式。通過新建工程LX3_7來掌握線性布局的使用方法以及屬性設(shè)置。3.3.2 表格布局表格布局(TableLayout)是一種把屏幕區(qū)域劃分成網(wǎng)格形式的布局方式,可以指定劃分的行和列數(shù)。在每一個方格里添加一個控件。在定義這種布局時通常與TableRow配合使用。TableRow表示表格行。通

溫馨提示

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

最新文檔

評論

0/150

提交評論