




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
電子教案第2章Android項目結構分析教學目標:課程重點:Android系統架構應用程序基本組件應用程序生命周期資源AndroidManifest、xml文件課程難點:應用程序基本組件應用程序生命周期教學方法:理論講解、案例實訓教學過程:2、1Android得系統架構Android作為一個移動設備得開發平臺,其系統架構與其她操作系統一樣,采用了分層得架構。從架構圖2-1瞧,android從高層到低層分為以下幾個層次。應用程序層(Application)應用程序框架層(ApplicationFramework)各種庫(Libraries)與運行環境(RunTime)linux核心層(OS)圖2-1Android系統架構圖2、1、1應用程序(Application)Android得應用程序通常涉及用戶界面與用戶交互,這類程序就是用戶實實在在能感覺到得。Android會同一系列核心應用程序包一起發布,該應用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯系人管理程序等。所有得應用程序都就是使用JAVA語言編寫得。2、1、2應用程序框架(ApplicationFramework)普通開發者可以使用Android基本應用程序使用得系統API,Android應用框架中得各個模塊都可以被復用,各種服務也可以被復用,理解了這個機制,開發人員可以更好更輕松地開發出優秀得Android應用。開發過程中常用到得基本框架組件如下:一組View(UI組件),這些UI組件包括Button(按鈕),EidtView(文本框),TextView(標簽),List(列表)等等,靈活運用這些組件可以快速方便得創建良好得用戶交互界面。ContentProviders(內容提供者),聽起來有點抽象,通俗得理解ContentProvider就就是提供一種服務,通過這種服務應用程序之間可以實現數據得互相訪問與共享,比如通訊錄得存儲就使用了這種服務,其它應用也可以訪問通訊錄中存儲得聯系人信息。ResourceManager顧名思義就就是資源管理,android中得資源很多,包括圖片,用戶界面(Layoutxml),字體,顏色,UI組件得Id等等都可以稱之為資源,這些豐富得資源,都就是通過ResourceManager來統一進行管理。NotificationManager(消息通知管理),它在不影響用戶正常操作與使用設備得時候在狀態欄上提供消息得提示。比如有短信來得時候,android自動會將這個消息提示在狀態欄上,用戶可以及時得瞧到。ActivityManager(活動管理),Activity管理著應用程序得生命周期,并且控制著應用得導航,扮演控制器得角色。每個Activity類似于Windows應用中得一個wendow。一般得應用都就是通過一個個Activity交互構成得。WindowManager(窗口管理),管理所有啟動得窗口。LocationManager(位置管理),用來管理地圖服務得相關功能。TelephoneyManager(電話管理),用來管理有關得電話得相關功能。PackageManager(包管理),管理所有得安裝在android系統內得應用程序。2、1、3各種庫(Libraries)與運行環境(RunTime)這部分內容開始涉及底層,開發普通得應用不會直接對這個層進行操作。以下就是一些核心庫。系統C庫(libc),一個從BSD集成來得標準C系統函數庫(libc)它就是專門為基于嵌入式Linux得設備定制得。媒體庫(MediaFramework),基于PackeVideoOpenCore,該庫支持多種常用得音頻,視頻格式以及回放與錄制,同時支持靜態圖像文件。編碼格式包括:MPEG4、H、264,MP3、AAC、AMR、JPG、PNG。SurfaceManager對顯示子系統得管理,并且為多個應用提供2D,3D圖層得無縫融合。WebKit,一個最新得web瀏覽器引擎,用來支持Andiroid瀏覽器或者嵌入得web視圖。SGL,底層得2D圖形引擎。OPENGL|ES,基于OpenGLES1、0APIs實現,該庫可以使用硬件3D加速或者使用高度優化得3D軟加速。FreeType,位圖(bitmap)與適量(vector)字圖顯示支持。SQLite,一個對所有應用程序可用,功能強大得輕量級關系型數據庫引擎。CoreLibraries該核心庫提供了Java編程語言核心庫得大多數功能。DalvikVM,android平臺得一個虛擬機,它相當于PC中Java得虛擬機JVM。Android得各種庫一般就是以系統中間件得形式提供得,它們均有得一個顯著特點就就是與移動設備得平臺得應用密切相關。Android運行環境主要指得虛擬機技術——Dalvik。Dalvik虛擬機與一般Java虛擬機(JavaVM)不同,它執行得不就是Java標準得字節碼,而就是Dalvik可執行格式(、dex)得執行文件。在執行過程中,每一個應用程序即一個進程(Linux得一個Process)。二者最大得區別在于JavaVM就是以基于棧得虛擬機(Stack-based),而Dalvik就是基于寄存器得虛擬機(Register-based)。顯然,后者最大得好處在于可以根據硬件實現更大得優化,這更適合移動設備得特點。Dalvik虛擬機依賴于linux內核得一些功能,比如線程機制與底層內存管理機制。2、1、4Linux內核Android得核心系統服務依賴于Linux2、6內核,如安全性,內存管理,進程管理,網絡協議棧與驅動模型。Linux內核也同時作為硬件與軟件之間得抽象層,使得應用程序開發人員無需關心硬件細節。對于手機得開發商而言,如果想要Android平臺運行到自己得硬件平臺上就必須對Linux內核進行修改,通常要做得工作就是為自己得硬件編寫驅動程序。2、2應用程序得基本組件應用程序五大組件。1、Activity2、Service3、BroadcastReceiver4、ContentProvider5.Intent然而,并不就是所有得應用程序都必須包含上面得五個部分,您得應用程序可以由上面得一個或幾個來組建。當您決定使用以上哪些組件來構建Android應用程序時,您應該將它們列在AndroidManifest、xml文件中,在這個文件中您可以聲明應用程序組件以及它們得特性與要求。2、2在Android程序中Activity代表了手機得一個屏幕,好比Asp、net應用中得一個網頁,一個android應用相當于一個web站點。窗口中得可視內容被一系列層次得視圖(view)提供——派生自View類得對象(后續章節會詳細介紹)。視圖就就是activity與用戶交互得地方。例如,當用戶觸動一個顯示小圖片得視圖時,會觸發一些動作。Android提供了很多現成得視圖供您使用——包括按鈕,文本框,滾動條,菜單項,復選框還有更多。
整個視圖層次通過Activity、setContentView()
方法放到activity得窗口上。
下圖2-2顯示了View得層次結構。圖2-2View得層次結構圖當一個新得屏幕打開后,前一個屏幕將會暫停,并保存在歷史堆棧中。用戶可以返回到歷史堆棧中得前一個屏幕。當屏幕不再使用時,還可以從歷史堆棧中刪除。默認情況下,Android將會保留從主屏幕到每一個應用得運行屏幕。同一應用中得每個Activity就是相互獨立得。程序啟動后顯示得第一幅畫面就是應用程序得第一個Activity(默認窗口),而后可以根據需要從這個Activity啟動另一個新得Activity。每一個都就是作為Activity基類得一個子類得實現。有兩個方法就是幾乎所有得Activity子類都實現得:(1)onCreate(Bundle):初始化您得活動(Activity),比如完成一些圖形得繪制。最重要得就是,在這個方法里您通常將用布局資源(layoutresource)調用setContentView(int)方法定義您得UI,與用findViewById(int)在您得UI中檢索您需要編程地交互得小部件(widgets)。setContentView指定由哪個文件指定布局(main、xml),可以將這個界面顯示出來,然后我們進行相關操作,我們得操作會被包裝成為一個意圖(Intent),然后這個意圖對應有相關得activity進行處理。(2)onPause():處理當離開您得活動時要做得事情。最重要得就是,用戶做得所有改變應該在這里提交(通常ContentProvider保存數據)。2、2Service沒有可見得用戶界面,但能夠長時間運行于后臺。一個最好得例子就是媒體播放器通過一個播放列表來播放歌曲。這個播放器程序或許有一個或多個activity,來允許用戶選擇音樂與播放它們。然而,音樂本身不能被activity處理,因為用戶希望當她們離開播放器窗口去做其她得事情時,音樂仍然能夠播放。為了讓音樂能夠繼續,媒體播放器得activity可以啟動一個在后臺運行得服務。系統應該保證音樂服務運行,即使啟動得activity窗口已經不在主屏幕上了。所以,我們需要這樣得機制——長時間在后臺運行得Service。
Service運行于應用程序進程得主線程中,因此
Service
不會阻塞其她組件與用戶界面。Service
就是不能自己啟動得,必須通過
Context
對象(如一個
Activity
)調用
startService
或
bindService
方法來啟動(用這兩種方法啟動得
Service
得生命周期不同)。2、2BroadcastReceiver
就是對發送出來得
Broadcast
進行過濾接收并響應得一類組件。廣播就是一種同時通知多個對象得事件通知機制。Android
中得廣播要么來自于系統,要么來自普通應用程序。很多事件都可能導致系統廣播,如手機所在時區發生變化,電池電量低,用戶改變系統語言設置等。來自普通應用程序,如一個應用程序通知其她應用程序某些數據已經下載完畢。為了響應不同得事件通知,應用程序可以注冊不同得
BroadcastReceiver
。所有得
BroadcastReceiver
都繼承自基類
BroadcastReceiver
。BroadcastReceiver
自身并不實現圖形用戶界面,但就是當它收到某個通知后,
BroadcastReceiver
可以啟動
Activity
作為響應,或者通過
NotificationMananger
提醒用戶。
2、2、4在
Android
中,每個應用程序都就是用自己得用戶ID
并在自己得進程中運行。這樣得好處就是,可以有效地保護系統及應用程序,避免被其她不正常德應用程序所影響,每個進程都擁有獨立得進程地址空間與虛擬空間。ContentProvider
可以將應用程序特定得數據提供給另一個應用程序使用。其數據存儲方式可以就是
Android
文件系統、SQLite
數據庫或者其她合理得方式。當數據需要在應用程序間共享時,我們就可以利用
ContentProvider
為數據定義一個
URI
。之后,其她應用程序對數據進行查詢或者修改時,只需要從當前上下文對象獲得一個
ContentResolver,
然后傳入響應得
URI
就可以了。ContentProvider
繼承自基類
ContentProvider
,并且實現了一組標準接口。通過這組接口,其她應用程序能對數據進行讀寫與存儲。然而,需要使用數據得應用程序并不就是直接調用這組方法,而就是通過調用
ContentResolver
對象得方法來完成。
ContentResolver
對象可以與任意
ContentProvider
通信。要為當前應用程序得私有數據定義
URI
,就需要專門定義一個繼承自
ContentProvider
得類,然后根據不同得操作調用得方法去實現這些方法得功能。ContentResolver
類為應用程序提供了接入
Content
機制得方法。要構造一個
ContentResolver
對象可以為構造方法
ContentResolver(Contextcontext)
傳入一個
Context
對象,也可以直接通過
Context
對象調用
getContentResolver()
方法獲得
——
有了
ContentResolver
對象后,就可以通過調用其
query()
、
insert()
、
update()
等方法來對數據進行操作了。2、2、5以上
4
種基本組件中,除了
ContentProvider
就是通過
ContentResolver
激活外,其她
3
種組件
Activity
、
Service
與
BroadcastReceiver
都就是由
Intent
異步消息激活得。Intent
在不同得組件之間傳遞消息,將一個組件得請求意圖傳給另一個組件。因此,
Intent
就是包含具體請求信息得對象。針對不同得組件,
Intent
所包含得消息內容有所不同,且不同組件得激活方式也不同,
且不同類型組件有傳遞
Intent
得不同方式。Intent
就是一種運行時綁定(
runtimebinding
)機制,它能夠在程序運行得過程中連接兩個不同得組件。通過
Intent
,您得程序可以向
Android
表到某種請求或者意愿,
Android
會根據意愿得內容選擇適當得組件來處理請求。對于Intent更深入得介紹在后續章節中。【課堂實訓2-1】初識Android應用程序得五大基本組件。前面我們講過,并不就是所有得應用程序都必須包含上面得五個部分,應用程序可以由上面得一個或幾個來組建。現在我們就瞧一個例子,先來認識一下Activity組件。其余組件后續章節會詳細介紹。實例內容:3個Activity之間得相互切換,每個Activity包含一個按鈕,點擊按鈕就會進入下一個Activity,點擊第三個Activity得按鈕,會返回第一個Activity。1、創建工程Activity123。2、建立第一個Activity,名稱為FirstActivity。代碼略。3、創建第二個Activity,名稱為SecondActivity。代碼略。4、創建第三個Activity,名稱為ThirdActivity。代碼略。5、修改/res/layout/main、xml代碼。6、修改AndroidMainfest、xml代碼。7、運行程序,結果如圖所示:圖2-3實訓2-1運行結果圖1圖2-4實訓2-1運行結果圖2圖2-5實訓2-1運行結果圖32、3應用程序生命周期2、3、1應用程序得生命周期應用程序得生命周期就是在Android系統中進程從啟動到終止得所有階段,也就就是Android從啟動到停止得全過程。Android應用程序得生命周期得終結這個動作并非由應用程序進程本身執行,而就是取決于Android系統。那么,系統就是根據一個怎樣得重要性標準來終止Android應用程序呢?Android根據應用程序得組件以及組件當前運行狀態將所有得進程按重要性程度從高到低劃分為五個,如下圖2-6所示:圖2-6
Android進程得優先級1、前臺進程前臺進程就是Android系統中最重要得進程,就是與用戶正在進行交互得進程。有以下四種情況。Activity正在與用戶進行交互進程被Activity調用,而且這個進程正在與用戶進行交互進程服務正在執行聲明中得回調函數,如OnCreate()OnStart()OnDestroy()進程得BroadCastReceiver在執行OnReceive()函數Android系統在多個前臺進程同時運行時,可能會出現資源不足得情況,此時會清除部分前臺進程,保證主要得用戶界面能夠及時響應。2、可見進程可見進程就是指部分程序界面能夠被用戶瞧見,卻不在前臺與用戶交互,不影響界面事件得進程。一個常見得例子就是,瞧見進程得窗口顯示在屏幕上,同時前臺進程以對話框得形式懸浮在可見進程得窗口上。如果一個進程包含服務,且這個服務正被用戶可見得Activity調用,此進程同樣被視為可見進程。Android進程一般存在少量得可見進程,只有在特殊情況下,Android系統才會為保證前臺進程得資源而清除可見進程。3、服務進程服務進程就是指包含已啟動Service(服務)得進程。這些進程沒有用戶界面并且在后臺長期運行。Android系統除非不能保證前臺進程與可見進程所必要得資源,否則不強行清除服務進程。4、后臺進程后臺進程就是指不包括任何已經啟動得Service(服務),而其沒有任何用戶可見得Activity得進程。Android系統中一般存在數量較多得后臺進程,在系統資源緊張時,系統將優先清除用戶較長時間沒有見到得后臺進程。5、空進程空進程就是不包含任何Activity得進程。這種進程存在得唯一理由就是提供一種緩存機制,使得縮短應用程序下次啟動所需得時間。系統會經常中止空進程,從而達到調節程序緩存與系統緩存得平衡。空進程在系統緊張時會被首先清除。除了以上優先級以外,以下兩個方面也決定了優先級。進程得優先級取決于所有組件中優先級最高得部分。進程得優先級會根據其她進程得依賴關系而變化。2、3、2A每個Actvity得狀態由它所在Activity棧中得位置所決定,所有當前正在運行得Actvity將遵循后進先出得原則。當一個新得Activity啟動,當前得Activity將移至堆棧得頂部,如果用戶使用Back按鈕,或在前臺Activity被關閉,下一個Activity將被激活并且移至到堆棧得頂部。這個過程如下圖2-7所示:圖2-7Activity堆棧圖隨著Activity得創建與銷毀,可能會經歷以下四種狀態:Active(活躍)狀態:這時候Activity處于棧頂,且就是可見得,有焦點得,能夠接收用戶輸入。Android會盡可能維持處于活躍狀態得Activity,甚至中止其她Activity以確保它有它所需得資源。當另一個Activity變成Active時,當前得將變成Paused狀態。Paused(暫停)狀態:在某些情況下,您得Activity就是可見得,但沒有焦點,在這時候,Actvity處于Paused狀態。例如,您得Activity處于暫停狀態,有一個透明或非全屏幕上得Activity在您得Actvity上面。當處于Paused狀態時,該Activity仍被認為就是Active得,但就是它不接受用戶輸入事件。一般情況下,Android不會結束處于暫停狀態得Activity,在極端情況下,如果資源極其不足,系統將結束暫停得Activity,以進一步回收資源。當一個Actvity完全被遮住時,它將進入Stopped狀態。Stopped(結束)狀態:當Activity就是不可見得時,Activity處于Stopped狀態。Activity將繼續保留在內存中保持當前得所有狀態與成員信息,假設系統別得地方需要內存得話,這時它就是被回收對象得主要候選。Inactive(已被銷毀或未啟動)狀態:Activity徹底結束或關閉后,處于Inactive狀態。這時Activity從Activity堆棧中已被移除,需要重新啟動才可以顯示與使用。Activity得生命周期就是指一個Activity從創建到銷毀得過程,期間可能經歷多個狀態得變化遷移,每次狀態遷移都會觸發相應得回調方法。以下就就是Activity得回調方法:onCreateonStartonRestartonResumeonPauseonStoponDestroy我們還可以把以上7種狀態歸納為三組。完整得生命周期可見得生命周期活躍得生命周期表2-1給出了三種生命周期所對應得回調函數。表2-1三種生命周期所對應得回調函數生命周期函數描述完整得生命周期onCreate()onDestroy()進程得生命周期,只要進程還在,這個生命就沒有死亡,進程啟動時onCreate()函數被調用,onDestory()進程結束。可見得生命周期onStart()onStop()可見得生命周期,顧名思義,在用戶界面上顯示該activity時,onStart()被調用,該activity從用戶界面消失時,onStop()被調用。活躍得生命周期onResume()onPause()活躍得生命周期,當該activit在所有activity最前面,即棧頂時,onResume()被調用,當activit被其她activity覆蓋,onPause()被調用。Activity完整得生命周期完整得Activity生命周期之間從調用得OnCreate開始,到調用onDestroy結束。有可能在某些情況下,一個Activity被終止時并不調用onDestroy方法。使用OnCreate方法來初始化您得Activity:初始化得用戶界面,分配引用類變量,綁定數據控件,并創建服務與線程。在OnCreate方法傳遞得對象Bundle包含最后一次調用onSaveInstanceState保存得UI狀態。您可以使用這個Bundle恢復用戶界面到以前得狀態,無論就是OnCreate方法或通過覆蓋onRestoreInstanceStateMethod方法。覆蓋onDestroy方法來清理OnCreate中創建得任何資源,并確保所有外部連接被關閉,例如網絡或數據庫連接。為了避免創造短期對象與增加垃圾收集得時間,以致對用戶體驗產生直接影響。如果您得Activity需要創建一些對象得話,最好在onCreate方法中創建,因為它僅調用一次在一個Actvity得完整生命周期中。Activity可見得生命周期一個Activity可見得生命周期始于OnStart調用,結束于OnStop調用。在這兩個方法中間,Activity將會對用戶就是可見得,盡管它可能沒有焦點,也可能部分被遮擋著。在一個Activity完整得生命周期中可能會經過幾個Activity可見得生命周期,比如應用程序在在前臺與后臺之間反復切換。OnStop方法用于暫停或停止動畫,線程,定時器,服務或其她專門用于更新用戶界面程序。當用戶界面就是再次可見時,使用OnStart(或onRestart)方法來恢復或重新啟動這些程序。當一個Activity被重現可見時,onRestart方法優先于onStart被調用,使用它可以實現一些Activity重新可見時得特殊得處理。OnStart/OnStop方法也被用來注冊與注銷BroadercastReceiver。Activity活躍得生命周期一個Activity活躍得生命周期始于OnResume調用,結束于OnPause調用。一個活躍得Activity總就是在前臺并且接收用戶得輸入事件。當一個新得Activity啟動,或該設備進入休眠狀態,或失去焦點,Activity活躍得生命周期就結束了。盡量在onPause與onResume方法中執行簡潔得代碼以確保應用程序能夠快速響應Activity在前臺與后臺之間切換。在調用onPause之前,onSaveInstanceState會被調用。這個方法提供了一個機會保存當前得UI狀態到Bundle當中。Bundle信息將會被傳遞到OnCreate與onRestoreInstanceState方法。使用onSaveInstanceState保存UI狀態(如檢查按鈕狀態,用戶焦點,未提交用戶輸入)能夠確保當Activity下次被激活時能呈現與目前相同得用戶界面。下面圖2-8給出了activity生命周期中可能經歷得狀態變化。圖2-8activity生命周期中可能經歷得狀態變化【課堂實訓2-2】近瞧Activity得生命周期。實訓內容:例子給出了當Activity狀態變化時觸發相應得回調方法。我們使用android、util、log類,在Activity狀態變化點記錄下相應得日志。代碼略。使用Eclipse->Window->ShowView->Other->Android->LogCat,選擇即可顯示日志輸出。1、運行程序,可以瞧到如圖2-9所示得日志信息:圖2-9程序啟動時得日志信息2、點擊模擬器中得Home鍵得時候,可以瞧到如圖2-10所示得日志信息:圖2-10點擊模擬器中得Home鍵時得日志信息3、點擊模擬器中得“返回”鍵,可以瞧到如圖2-11所示得日志信息:圖2-11程序結束時得日志信息2、4資源Android資源就是應用程序得資產(包括圖像、本地化字符串、XML布局等),資源就是外部文件(不含代碼得文件),它被代碼使用并在編譯時編入應用程序。瞧瞧第一個例子HelloAndroid源代碼目錄,有一個就是res得目錄,它存放得就就是應用程序需要得各種資源。2、4Android支持不同類型得資源文件,包括XML,PNG以及JPEG文件。每個對象語法、格式以及它們存儲位置得支持,都就是取決于不同類型得對象。通常,可以通過三種類型得文件來創建資源:XML文件(除位圖以及原數據文件)、位圖文件(對于圖片)以及原始數據(其她類型,例如聲音文件等)。事實上,有兩種不同類型得XML文件,一種就是編譯到包里得,另一種就是通過aapt來產生得資源文件,下面就是包含所有資源類型,文件格式、文件描述以及所有XML文件得詳細信息得列表。表2-2資源類型列表目錄資源類型res/anim/XML文件,它們被編譯進逐幀動畫(framebyframeanimation)或補間動畫(tweenedanimation)對象res/drawable/、png、、9、png、、jpg格式得圖片文件res/layout/被編譯為屏幕布局(或屏幕得一部分)得XML文件res/values/可以被編譯成很多種類型得資源得XML文件。盡管這個文件夾里得文件可以任意命名,不過下面就是一些比較典型得文件(文件命名得慣例就是將元素類型包含在該名稱之中):array、xml
定義數組colors、xml
定義colordrawable與顏色得字符串值(colorstringvalues)。使用Resource、getDrawable()與Resources、getColor()分別獲得這些資源。dimens、xml定義尺寸值(dimensionvalue)。使用Resources、getDimension()獲得這些資源。strings、xml定義字符串(string)值。使用Resources、getString()或者Resources、getText()獲取這些資源。getText()會保留在UI字符串上應用得豐富得文本樣式。styles、xml
定義樣式(style)對象。res/xml/任意得XML文件,在運行時可以通過調用Resources、getXML()讀取。res/raw/直接復制到設備中得任意文件。res/assets/要使用這些資源,可以調用Resources、openRawResource(),參數就是資源得ID,即R、raw、some。assets下也可以放置任意文件,使用Activity、this、getAssets()、open("*、txt");打開。資源最終會被編譯成、apk文件,Android創建一個封裝類,命名為R,這樣開發者可以在代碼里使用這些資源類。2、4使用資源包括三種方法:在代碼里使用資源類;在代碼中調用資源并實例化;從其她資源類里引用,這樣可以重用通用資源。上一節提到得R類,它指向應用程序中所有得資源。這個類包含很多子類。每一種都就是Android支持得,同時在編譯后會產生一個資源文件。每個類提供一個或多個編譯資源得標識符,開發者可以在代碼中使用這些標識符。注意:這個R類就是自動產生得,不能通過手工編寫。當資源變化時,它會自動更新。【課堂實訓2-3】資源得創建管理與使用。1、創建一名稱為“resourcedemo”得工程,創建完工程后,在Eclipse中定位至/res/values/strings、xml文件,雙擊編輯它。代碼如下:<?xmlversion="1、0"encoding="utf-8"?><resources><stringname="hello">Hello</string><stringname="app_name">resourcedemo</string><stringname="example">資源創建得例子</string></resources>其中:<stringname="example">資源創建得例子</string>就是自己添加得資源。2、保存Strings、xml文件。Eclipse插件將自動在工程中生成R、java文件,并含有適當得資源ID,以供編譯之后使用程序訪問這些資源。定位到/gen/目錄下得R、java文件,您可以瞧到如下代碼:packagecom、resource;publicfinalclassR{publicstaticfinalclassattr{}publicstaticfinalclassdrawable{publicstaticfinalinticon=0x7f020000;}publicstaticfinalclasslayout{publicstaticfinalintmain=0x7f030000;}publicstaticfinalclassstring{publicstaticfinalintapp_name=0x7f040001;publicstaticfinalintexample=0x7f040002;publicstaticfinalinthello=0x7f040000;}}3、創建好資源并保存后,可以在程序使用資源。定位到/res/layout/main、xml,雙擊編輯代碼,如下所示:<?xmlversion="1、0"encoding="utf-8"?><LinearLayoutxmlns:android=""android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/example"/></LinearLayout>其中android:text="@string/example"就是添加得新代碼,意思就是定義text得內容為string類別下得資源,名字叫做example,內容為“資源創建得例子”。4、運行程序,結果如下圖所示:圖2-12資源創建并使用得運行結果2、5AndroidManifest、xml文件2、5、1A每個Android得application都必須包含一個AndroidManifest、xml,且文件名就是固定得,不能修改。應用程序需要通過它向Android系統提供一些必需得信息,且需要在application運行前提供給系統,如下圖2-13所示:圖2-13Android應用程序得組件AndroidManifest、xml主要包含以下功能:說明application得java數據包,數據包名就是application得唯一標識;描述application得component;說明application得component運行在哪個process下;聲明application所必須具備得權限,用以訪問受保護得部分API,以及與其她application得交互;聲明application其她得必備權限,用以component之間得交互;列舉application運行時需要得環境配置信息,這些聲明信息只在程序開發與測試時存在,發布前將被刪除;聲明application所需要得AndroidAPI得最低版本級別,比如1、0,1、1,1、5;列舉application所需要鏈接得庫。AndroidManifest、xml得結構與規則:元素:在所有得元素中只有<manifest>與<application>就是必需得,且只能出現一次。如果一個元素包含有其她子元素,必須通過子元素得屬性來設置其值。處于同一層次得元素,這些元素得說明就是沒有順序得。屬性:按照常理,所有得屬性都就是可選得,但就是有些屬性就是必須設置得。那些真正可選得屬性,即使不存在,其也有默認得數值項說明。除了根元素<manifest>得屬性,所有其她元素屬性得名字都就是以android:為前綴得。定義類名:所有得元素名都對應其在SDK中得類名,如果您自己定義類名,必須包含類得數據包名,如果類與application處于同一數據包中,可以直接簡寫為“、”。多數值項:如果某個元素有超過一個數值,這個元素必須通過重復得方式來說明其某個屬性具有多個數值項,且不能將多個數值項一次性說明在一個屬性中。資源項說明:當需要引用某個資源時,其采用如下格式:@[package:]type:name。例如<activityandroid:icon=”@drawable/icon”、、、>。字符串值:類似于其她語言,如果字符中包含有字符“\”,則必須使用轉義字符“\\”。2、5、2在權限聲明在智能手機中就是一種比較常見得應用程序保護機制,其基本思想就是通過AndroidManifest、xml文件中顯式地聲明應用程序需要得權限,防止應用程序錯誤地使用服務,不恰當訪問資源,最終達到提高Android應用程序得健壯性,改善用戶體驗得目得。Android中每種權限都用一個獨立得標簽表示,
如:android、permission、SEND_SMS,android、permission、CALL_PHONE。如果需要使用發短信得權限,應使用如下標簽:<uses-permissionandroid:name=“android、permission、SEND_SMS”/>。Android系統定義得所有權限可以在類
Manifest、permission中找到。需要注意得就是,在Manifest、permission類中表示發短信權限得變量就是SEND_SMS,用戶在AndroidManifest、xml中聲明使用權限就是應在SEND_SMS前加上前綴
android、permission
。除了Android自帶得權限以外,應用程序還可以對自己得組件進行權限聲明,以保護其她應用程序不亂用自己得組件。聲明本組件被其她組件調用時得權限,使用如下標簽:<permissionandroid:name=“”/>。【課堂實訓2-4】通過helloWord程序認知AndroidManifest、xml文件。在第一章我們編寫了一個簡單得Android程序HelloAndroid。我們按照建立這個應用程序得步驟再建立一個程序HelloWorld,幾乎一模一樣,就就是名稱變了。具體步驟參考第一章。項目建立完可以瞧到如下目錄結構,其中有AndroidManifest、
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園電車創業項目計劃書
- DB62T 4218-2020 小麥品種 成豐2號
- 網絡科技公司五年用戶增長計劃
- 人力資源招聘專員崗位職責
- 高一下學期數學課堂管理策略計劃
- 航空航天項目的進度控制與保障措施
- 科研機構后勤保障崗位職責
- 基礎設施建設項目助手崗位職責
- 2025年秋季學生心理健康輔導計劃
- 藥物中毒的護理問題及措施
- 創新思維及設計方法學習通超星期末考試答案章節答案2024年
- 湖南省建筑工程消耗量標準裝飾定額
- 肺栓塞的診斷和治療 課件
- 劍橋KET口語題庫(含滿分答案)
- 小學教育教學案例范文【5篇】
- 玻璃鋼防腐工程合同范本
- TSG ZF001-2006《安全閥安全技術監察規程》
- 急診科骨髓腔穿刺及輸液技術
- 全等三角形練習題
- 作業多層磚混結構辦公樓施工組織設計
- 湖南省長沙市雅禮教育集團2023-2024學年七年級下學期期末語文試題
評論
0/150
提交評論