版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章Android應(yīng)用程序框架3.1HelloWorld工程
3.2HelloWorld工程工作原理
3.3應(yīng)用程序框架
3.4Activity生命周期
3.5小結(jié)
3.1HelloWorld工程
絕大多數(shù)程序設(shè)計語言的教科書均以顯示“Helloworld!”字符串的工程作為第一個程序?qū)嵗?,稱這個工程為“HelloWorld工程”。而且,大部分高級程序設(shè)計語言幾乎只要輸入一句代碼就可以實現(xiàn)這個功能。在Android下實現(xiàn)HelloWorld工程也非常方便,甚至不用輸入代碼,下面介紹基于Eclipse軟件創(chuàng)建Android的HelloWorld工程的過程。
例3.1
顯示“HelloWorld”工程。
在Eclipse集成開發(fā)環(huán)境(如圖1-7)下點擊菜單“File|New|Project…”(如圖3-1所示),彈出如圖3-2所示窗口。圖3-1“File|New”菜單項圖3-2新建工程對話框在圖3-2中選擇建設(shè)的工程類型為“AndroidProject”,點擊“Next”按鈕進入圖3-3所示界面。圖3-3新建Android工程對話框在圖3-3中輸入“MinSDKVersion”為10,即使用API的級別為10。然后,點擊“Finish”按鈕,進入圖3-4所示界面。圖3-4ex03_01工程圖3-4是按照Android新建工程向?qū)傻墓こ蘣x03_01,左邊為包瀏覽器,顯示了工程ex03_01的目錄和文件結(jié)構(gòu)(后面結(jié)合圖3-7說明);右邊顯示了MyHelloAct.java文件的內(nèi)容。在圖3-4中點擊“OpenstheAndroidSDKandAVDManager”快捷按鈕,啟動AndroidSDK模擬器myAVD233SD64,如圖1-22所示。等模擬器myAVD233SD64啟動就緒后,在圖3-4中選中工程ex03_01,點擊菜單“Run|Runas|AndroidApplication”,如圖3-5所示。工程ex03_01的執(zhí)行結(jié)果如圖3-6所示,即在模擬器myAVD233SD64中顯示一行文字“HelloWorld,MyHelloAct!”,顯示窗口標題名為MyHelloApp,即應(yīng)用名。因此,只需要按照Android新建工程向?qū)Ь涂梢陨梢粋€顯示“HelloWorld!”的工程,無需程序員輸入一句代碼。圖3-5“RunAs”菜單圖3-6工程ex03_01運行結(jié)果執(zhí)行Android新建工程向?qū)?chuàng)建工程ex03_01后,將在工作目錄“D:\myWorkspace”下創(chuàng)建一個新目錄即ex03_1,如圖3-7所示。目錄ex03_01下有子目錄assets、bin、gen、res、src。其中res和assets均存放資源文件,分別稱為資源文件子目錄和資產(chǎn)文件子目錄,res資源文件被資源管理器自動生成識別號(ID)存放在“gen\cn\jxufe\zhangenhe”目錄下的R.java文件中,可被Java程序通過訪問ID號直接訪問;而assets目錄的資產(chǎn)文件的訪問需要指定訪問路徑。src子目錄為Java源程序存放的目錄即MyHelloAct.java存放在目錄“src\cn\jxufe\zhangenhe”下。Bin子目錄下為編譯生成的目標文件,包括可執(zhí)行文件classes.dex和壓縮安裝包文件ex03_01.apk,如圖3-7所示。圖3-7工程ex03_01目錄結(jié)構(gòu)比較圖3-7和圖3-4中的包瀏覽器可見,如果把包瀏覽器中的“cn.jxufe.zhangenhe”視為目錄樹“cn\jxufe\zhangenhe”,那么包瀏覽器的結(jié)構(gòu)與圖3-7的目錄結(jié)構(gòu)完全對應(yīng),包瀏覽器提供了快速訪問工程ex03_01中需要程序員管理的目錄和文件。此外,它還提供了“Android2.3.3”目錄,該目錄下為Android框架層的庫文件和資源。創(chuàng)建工程時輸入的包名為cn.jxufe.zhangenhe,除了用于作為類的容器外,還用作保存程序文件及其編譯的目標文件的目錄樹。
3.2HelloWorld工程工作原理
對于傳統(tǒng)的面向過程C語言程序,其程序執(zhí)行入口為main函數(shù),程序的運行就是main函數(shù)中各條語言按語法規(guī)則依次執(zhí)行。對匯編語言程序設(shè)計熟悉的程序員,以及那些做過DSP或單片機開發(fā)的程序員,對程序的運行有著深刻的認識。CPU(中央處理單元)總是執(zhí)行其PC(程序計數(shù)器寄存器)指針指向的程序空間地址處的指令代碼,對于分支和跳轉(zhuǎn)程序需要修改PC的值。對于匯編語言程序設(shè)計而言,程序的執(zhí)行過程非常清晰,程序員負責所有的資源調(diào)用,并安排程序指令的執(zhí)行。匯編語言與程序?qū)崿F(xiàn)的算法和功能的細節(jié)直接相關(guān),開發(fā)這類程序需要專業(yè)開發(fā)人員,難度相對較大。高級語言是接近自然語言的一種程序設(shè)計語言,當基于這種高級語言的應(yīng)用程序設(shè)計越簡單,那么這類應(yīng)用程序的執(zhí)行過程越不容易被理解。Android應(yīng)用程序基于Java高級語言和Dalvik虛擬機,它的執(zhí)行過程比傳統(tǒng)的Java程序(例如第二章的程序)更難理解,這時往往需要按Android應(yīng)用程序設(shè)計的規(guī)定方法即按照Android框架進行程序設(shè)計,并理解其程序的執(zhí)行過程。事實上,不可能做到像理解匯編語言程序的執(zhí)行過程一樣理解Android程序的執(zhí)行過程。
在AndroidSDK安裝目錄的docs目錄下,即“D:\android-sdk-windows\docs”目錄下,打開文件“index.html”,可進入到Android開發(fā)者參考手冊,如圖3-8所示。圖3-8Android開發(fā)者參考手冊從圖3-8中找到Application類的公有方法onCreate,該方法是應(yīng)用程序啟動時首先執(zhí)行的方法即“Calledwhentheapplicationisstarting,beforeanyotherapplicationobjectshavebeencreated.”(當應(yīng)用程序要執(zhí)行時被調(diào)用,其他任務(wù)應(yīng)用程序?qū)ο蠖歼€沒有創(chuàng)建)。從第二章的學(xué)習知道,一個類的公有方法的調(diào)用有兩種途徑即被該類的實例調(diào)用或被該類中的方法調(diào)用。因此,可以推斷該方法將被Application中的某個靜態(tài)方法(可能就是mian方法)調(diào)用。所以,從Android開發(fā)者手冊可知,Android程序的執(zhí)行入口是Application類的onCreate方法。對于顯示“HelloWorld”的Android應(yīng)用程序工程ex03_01來說,其程序執(zhí)行入口也是Application類的OnCreate方法。在ex03_01工程中有一個文件AndroidManifest.xml,該文件內(nèi)容是XML語言的程序。XML是eXtensibleMarkupLanguage的縮寫,譯為可擴充標記語言,這類語言不像C或Java語言等可執(zhí)行高級語言,XML語言是不可執(zhí)行的。它的優(yōu)點在于格式統(tǒng)一且固定,用于為其他高級語言指定(或標記、配置)其數(shù)據(jù)或資源的位置和相互關(guān)系。例如,Java語言界面中需要使用一個按鈕,可以使用XML語言為按鈕指定名稱、大小和字體等屬性,Java程序在執(zhí)行時按XML提供的信息要求調(diào)用或顯示該按鈕。工程ex03_01的文件AndroidManifest.xml中通過以下語句指定應(yīng)用程序啟動后執(zhí)行的Activity。這段代碼還將在第2.3節(jié)中詳細介紹,這里第1、10行說明這兩行中間的內(nèi)容屬于應(yīng)用application,第2~8行說明了應(yīng)用中包含了一個名為MyHelloAct的活動界面(Activity),第5行說明該活動界面是主界面(MAIN)。因此,應(yīng)用類Application的onCreate啟動后,將轉(zhuǎn)到類MyHelloAct去執(zhí)行,該類位于MyHelloAct.java文件中。MyHelloAct.java文件的代碼如下:上述代碼中,第6行定義了MyHelloAct類,該類繼承了類Activity,類MyHelloAct中僅有一個方法即onCreate方法,該方法覆蓋了其父類Activity的同名方法。由于類MyHelloAct的onCreate方法是公有方法,因此要想調(diào)用該方法,必須先創(chuàng)建MyHelloAct類的實例(對象)。但是,這一步工作由Android框架幫程序員完成了,即Android框架幫程序員定義了類MyHelloAct的實例(對象)并通過其對象調(diào)用了onCreate方法。所以,ex03_01工程從開始執(zhí)行到執(zhí)行到類MyHelloAct的onCreate方法之前所做的工作都被Android框架隱藏了,程序員會誤認為工程ex03_01最開始執(zhí)行的是第9行的onCreate方法。根據(jù)上面的解釋可知,工程ex03_01啟動后,Android操作系統(tǒng)框架層會引導(dǎo)它執(zhí)行到類MyActivity的onCreate方法。假設(shè)Android框架層為類MyActivity創(chuàng)建的對象名為myHelloObj,整個ex03_01工程啟動后成為Android系統(tǒng)的一個進程(Android系統(tǒng)中每個應(yīng)用程序?qū)?yīng)著一個進程),該進程通過對象myHelloObj執(zhí)行其onCreate方法。第10行以其父類的方法onCreate初始化對象myHelloObj繼承的父類Activity中的公有和保護數(shù)據(jù)。第11行以setContentView方法使用布局R.layout.main設(shè)置活動界面內(nèi)容,這里的方法setContentView是類Activity的公有方法,可以直接被其子類MyActivity的對象調(diào)用。類Activity中有三種重載形式的setContentView方法,這里調(diào)用的方法原型為:
publicvoidsetContentView(intlayoutResID);
參數(shù)layoutResID被設(shè)置為R.layout.main(第11行),如圖3-9所示。圖中R.java為自動生成的文件(不能修改),該文件中只有一個類,名為R,其中還有一個內(nèi)部類即:
1publicstaticfinalclasslayout{
2publicstaticfinalintmain=0x7f030000;
3}
該類為公有靜態(tài)類,且用final修飾,表示該類不能派生新類。該類中有一個公有靜態(tài)整型常量main(第2行),這里的main對應(yīng)于圖3-9中資源res中的main.xml文件,即這里的R.layout.main是main.xml的標識符,所以語句setContentView(R.layout.main)將設(shè)置活動界面的內(nèi)容為main.xml。圖3-9包瀏覽器上述代碼是XML格式,第2行說明布局為線性布局(即該布局的控件按行或列順序逐個依次擺放)。第7~11行表示這是一個靜態(tài)文本框(或文本視圖),其寬度與活動界面寬度相同(fill_parent);其高度為顯示的字符高度(wrap_content);顯示的字符串為“@string/hello”,表示顯示圖3-9中R.layout.string.hello指向的字符串,即圖3-9中資源res中的strings.xml中名為hello的字符串。文件strings.xml的內(nèi)容為:
1<?xmlversion="1.0"encoding="utf-8"?>
2<resources>
3<stringname="hello">HelloWorld,MyHelloAct!</string>
4<stringname="app_name">MyHelloApp</string>
5</resources>從上述代碼中,可見名為hello的字符串值為“HelloWorld,MyHelloAct!”(第3行)即將這一行字符串的值顯示在活動界面中,如圖3-6所示。
現(xiàn)在通過執(zhí)行對象myHelloObj的方法onCreate已經(jīng)把顯示內(nèi)容準備好了,但是該活動界面還沒有顯示出來,Android框架還會自動通過對象myHelloObj調(diào)用onStart方法,該方法在工程ex03_01中沒有體現(xiàn)。調(diào)用onStart方法后,ex03_01工程的界面就顯示出來了。然后,Android框架還要自動通過對象myHelloObj調(diào)用onResume方法,該方法調(diào)用后ex03_01的活動界面將得到焦點,成為顯示界面的“前臺”界面。這些onStart方法、onResume方法以及onCreate方法都是類Activity的保護方法,將被其子類(這里是MyHelloAct)繼承,因此可被其子類對象myHelloObj調(diào)用。經(jīng)過上述的過程之后,才能得到如圖3-6所示的界面。一旦該程序運行,將無法被人工關(guān)閉,用戶可以通過點擊模擬器的“Home”按鈕回到歡迎界面,或者在圖3-10中點擊MyHelloApp應(yīng)用程序圖標重新進入“HelloWorld”界面??傊?,該程序無法關(guān)閉。Android系統(tǒng)會自動管理那些沒有顯示(或沒有使用)的應(yīng)用程序,根據(jù)內(nèi)存和應(yīng)用程序的使用情況自動關(guān)閉那些不再被使用的應(yīng)用程序,同時釋放它們占用的內(nèi)存空間。圖3-10應(yīng)用程序圖標綜上所述,對于Android程序員來說,只需要明白創(chuàng)建的用戶活動界面類繼承了類Activity,當應(yīng)用程序開始執(zhí)行時將自動執(zhí)行其onCreate方法,程序員需要在onCreate方法中添加界面初始化的代碼,然后將應(yīng)用程序交給Android系統(tǒng)管理。對于工程ex03_01而言,在類MyHelloAct的onCreate方法中設(shè)置了包含字符串“HelloWorld!”的顯示界面即完成了顯示“HelloWorld”的任務(wù)。同時,Android應(yīng)用程序中需要的各種顯示元素均以資源的形式保存,并借助XML語言進行管理,而且整個Android應(yīng)用都需要借助AndroidManifest.xml進行配置。結(jié)合圖3-4,工程ex03_01中整個工程的配置文件為AndroidManifest.xml,這個文件只能有一個!位于資源res的layout下的XML文件均為布局文件,工程ex03_01中只有一個布局文件即main.xml,如果有多個Activity,則對應(yīng)地有多個布局文件。在資源res的value下的文件為常量定義文件,可以有多個這類文件。工程ex03_01中只有一個字符串資源文件即strings.xml。所有XML文件內(nèi)容均可以圖形化地創(chuàng)建,例如可如圖3-11所示創(chuàng)建常量字符串資源。在圖3-11中,點擊“Add…”按鈕即可創(chuàng)建8類資源,其中選擇String表示創(chuàng)建字符串。圖3-11strings.xml圖形界面
3.3應(yīng)用程序框架
3.3.1應(yīng)用程序框架基本組成
例3.2
應(yīng)用程序框架實例。
新建工程ex03_02即工程文件名為ex03_02,其中應(yīng)用名為MyFrameApp,包名為cn.jxufe.zhangenhe,活動界面(Activity)名為MyFrameAct,最小SDK版本號為10。工程ex03_02的結(jié)構(gòu)如圖3-12所示。在圖3-12中,src目錄用于存放程序員編寫的Java源程序;gen目錄是工程建立時自動生成的,包含了所有資源文件(位于res目錄下)的索引號;Android2.3.3目錄為Android系統(tǒng)包(或系統(tǒng)庫),供應(yīng)用程序調(diào)用,相當于C語言的函數(shù)庫;assets目錄稱為資產(chǎn)文件目錄,也是一種資源文件目錄,與res目錄下資源文件的不同之處在于,assets資產(chǎn)文件沒有在gen目錄中自動生成索引號,要使用這類文件必須指定完整的文件路徑。res資源文件目錄包含了項目所有可能使用的資源文件,例如圖形文件、布局文件、常量文件等。AndroidManifest.xml是Android工程的全局配置文件;perties文件是自動生成的,包含使用的Android版本號;proguard.cfg文件是Java程序的優(yōu)化配置文件,該文件也是自動生成的,其內(nèi)容不需要干預(yù)。圖3-12工程ex03_02文件和目錄結(jié)構(gòu)3.3.2Android配置文件AndroidManifest.xml
在圖3-12中雙擊AndroidManifest.xml文件,將彈出如圖3-13所示界面。AndroidManifest.xml有兩種顯示方式即圖形化顯示方式和文本顯示方式,如圖3-13狀態(tài)欄中所示,其中狀態(tài)欄的標簽Manifest、Application、Permissions(用于設(shè)置使用權(quán)限)和Instruments(用于監(jiān)視系統(tǒng)與應(yīng)用程序間通信)為圖形化工程配置方法,而標簽AndroidManifest.xml為文本顯示方式。筆者建議初學(xué)者使用這兩種方式相結(jié)合的方法修改AndroidManifest.xml文件。由于工程ex03_02中只有一個活動界面,故圖3-13中只有一個Activity即MyFrameAct,當需要顯示多個界面時,必須將新的Activity添加到AndroidManifest.xml文件中,此時點擊圖3-13中的“Add…”按鈕可實現(xiàn)圖形化地添加工作。圖3-13AndroidManifest.xml上述XML代碼中,第1行說明XML版本為1.0,采用UTF-8編碼方法。這種編碼方法中,如果某個字符在Unicode碼中的值小于256,則使用一個字符存儲,這樣可有效地節(jié)約存儲空間。第2行的manifest與第18行的/manifest配對,表示這兩行之間為配置內(nèi)容,配置字段名使用“:”連接,例如xmlns:android和android:versionCode等。第2行的xmlns:android=/apk/res/android指定工程中使用的Android程序包,這一句不能改動。第3行指定應(yīng)用程序的包名為cn.jxufe.zhangenhe,第4行指定應(yīng)用程序版本號為1,第5行指定應(yīng)用程序版本名稱為1.0,第6行指定應(yīng)用程序所使用的SDK版本為10。第8~17行為應(yīng)用的配置,第8行的android:icon指定應(yīng)用程序圖標為資源文件“@drawable/icon”即圖3-14中的icon,這里的@drawable/iocn即指R.drawable.icon,而這個數(shù)據(jù)對應(yīng)到res目錄中的icon.png文件。因此,icon.png文件就是應(yīng)用程序的圖標。第8行的android:label指應(yīng)用程序的名稱(這個名稱并不是出現(xiàn)在應(yīng)用程序圖標下面的字符串,見圖3-15),“@string/app_name”表示R.string.app_name,如圖3-14所示,它對應(yīng)strings.xml中名稱為app_name的字符串“MyFrameApp”。因此,應(yīng)用程序的名稱為MyFrameApp。圖3-14包瀏覽器的gen目錄在指定應(yīng)用程序名或活動界面標題時,除了可以使用“@string/app_name”從字符串資源文件中查找字符串外,還可以直接指定字符串,例如前述AndroidManifest.xml文件代碼的第8~10行可寫為如下形式:
8<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
9<activityandroid:name=".MyFrameAct"
10android:label="框架窗口">
則運行結(jié)果如圖3-15所示。圖3-15中的可見應(yīng)用程序活動界面標題和程序圖標下的程序說明文字(習慣上被稱為程序名稱)都是“框架窗口”因此,第8行的應(yīng)用程序名稱android:label沒有實質(zhì)性的意義(估計Android在后續(xù)的版本中將改進這一問題)。圖3-15應(yīng)用程序執(zhí)行結(jié)果和程序圖標3.3.3Android資源文件
第3.3.2節(jié)直接使用漢字字符串顯示了漢字標題,一般情況下,不采用這種方法。在工程ex03_02中,選擇右鍵彈出菜單“New|Other…”,如圖3-16所示,進入圖3-17所示界面。圖3-16工程右鍵彈出菜單圖3-17新建文件對話框在圖3-17中,選擇新建文件類型為AndroidXMLFile,然后,點擊“Next”按鈕進入圖3-18所示界面。圖3-18新建XML資源文件在圖3-18所示界面中,輸入文件名為strings_hz.xml,選擇文件類型為常量值“Values”,選擇語言為“zh”(表示簡體中文),選擇地區(qū)為“CN”(表示中國),自動生成的資源文件目錄為“/res/values-zh-rCN”,點擊“Finish”按鈕完成新建XML文件向?qū)?。此時的資源文件目錄結(jié)構(gòu)如圖3-19所示。圖3-19資源文件樹狀圖在圖3-19中,新建的資源目錄為values-zh-rCN,新建的資源文件名為strings_hz.xml。雙擊strings_hz.xml文件,進入圖3-20所示界面。在圖3-20中,點擊“Add…”按鈕,在“Name”中添加字符串“mainWindowCaption”,在“Value”中添加“框架主窗口”即添加了一個名為mainWindowCaption值為“框架主窗口”的常量字符串資源。
在圖3-20中,點擊下方的“strings_hz.xml”,顯示如下所示代碼:
1<?xmlversion="1.0"encoding="utf-8"?>
2<resources>
3<stringname="mainWindowCaption">框架主窗口</string>
4</resources>圖3-20字符串資源文件XML圖形化設(shè)置方式其中,第3行代碼表示常量字符串名為mainWindowCaption,在調(diào)用時引用“@string/mainWindowCaption”,其字符串值(即字符串內(nèi)容)為“框架主窗口”。當文件strings_hz.xml內(nèi)容建好后,則在“gen”目錄自動生成該字符串的索引號,如圖3-21所示,即引用“@string/mainWindowCaption”相當于引用“R.string.mainWindowCaption”?,F(xiàn)在將AndroidManifest.xml中的第9~10行由原來的代碼:
9<activityandroid:name=".MyFrameAct"
10android:label="@string/app_name">
修改為:
9<activityandroid:name=".MyFrameAct"
10android:label="@string/mainWindowCaption">圖3-21“gen”目錄自動生成的字符串索引運行工程ex03_02,其運行結(jié)果和程序圖標如圖3-22所示。圖3-22程序運行結(jié)果與程序名稱通過熟練和巧妙地使用資源文件,可有效地減少工程中的Java代碼量,并且增強程序的層次性和可維護性。新建的資源文件均在“gen”目錄下生成對應(yīng)的Java類和常量索引號,如圖3-21所示。“gen”目錄下只有一個文件R.java,其代碼如下所示:
1/*AUTO-GENERATEDFILE.DONOTMODIFY.
2*
3*Thisclasswasautomaticallygeneratedbythe
4*aapttoolfromtheresourcedataitfound.It
5*shouldnotbemodifiedbyhand.
6*/
7
8packagecn.jxufe.zhangenhe;
9
10publicfinalclassR{
11publicstaticfinalclassattr{
12}
13publicstaticfinalclassdrawable{
14publicstaticfinalinticon=0x7f020000;
15}
16publicstaticfinalclasslayout{
17publicstaticfinalintmain=0x7f030000;
18}
19publicstaticfinalclassstring{
20publicstaticfinalintapp_name=0x7f040001;
21publicstaticfinalinthello=0x7f040000;
22publicstaticfinalintmainWindowCaption=0x7f040002;
23}
24}從圖3-21可以看出,R類下的所有類和常量均呈目錄樹的形式羅列出來,方便程序員直觀地查找和使用,因此一般不需要查看R.java文件的內(nèi)容。
自動生的strings.xml資源文件的代碼如下所示:
1<?xmlversion="1.0"encoding="utf-8"?>
2<resources>
3<stringname="hello">HelloWorld,MyFrameAct!</string>
4<stringname="app_name">MyFrameApp</string>
5</resources>上述代碼中,第2行和第5行配對,表示第3~4行為資源。第3行定義名稱為“hello”、值為“HelloWorld,MyFrameAct”的字符串常量。同理,第4行定義名稱為“app_name”、值為“MyFrameApp”的字符串常量。
自動生成的布局文件名為main.xml,其內(nèi)容如下所示:
1<?xmlversion="1.0"encoding="utf-8"?>
2<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
3android:orientation="vertical"
4android:layout_width="fill_parent"
5android:layout_height="fill_parent"
6>
7<TextView
8android:layout_width="fill_parent"
9android:layout_height="wrap_content"
10android:text="@string/hello"
11/>
12</LinearLayout>
在上述代碼中的第5行和第6行間插入一行代碼:
android:background="@drawable/mycowboy"這里的mycowboy是筆者選擇的一幅圖片(其版權(quán)歸相應(yīng)公司所有),存放位置如圖3-23所示。筆者產(chǎn)生了三種分辨率的圖片即480?×?800、240?×?400和24?×?40,圖片名都為mycowboy.png,分別存放在drawable-hdpi、drawable-mdpi和drawable-ldpi中。新添加的代碼用于設(shè)置布局的背景即采用圖片mycowboy.png作為布局的壁紙。運行結(jié)果如圖3-24所示。圖3-23新添加的圖片資源文件圖3-24設(shè)置布局背景為“西部牛仔”3.3.4Android源程序文件
參考圖3-12,可知工程ex03_02中只有一個程序文件即MyFrameAct.java。從圖3-12中可以看出,它有一個公有類MyFrameAct,該類位于包cn.jxufe.zhangenhe中,與程序文件同名,其中的方法為onCreate(返回值為void)。文件MyFrameAct.java的代碼如下所示:
1packagecn.jxufe.zhangenhe;
2
3importandroid.app.Activity;
4importandroid.os.Bundle;
5
6publicclassMyFrameActextendsActivity{
7/**Calledwhentheactivityisfirstcreated.*/
8@Override
9publicvoidonCreate(BundlesavedInstanceState){
10super.onCreate(savedInstanceState);
11setContentView(R.layout.main);
12}
13}
根據(jù)第3.3.3節(jié)對布局文件main.xml的了解,知道布局中有一個靜態(tài)文本框控件,可在onCreate方法中調(diào)用該控件的setText方法設(shè)置其顯示的字符串。下面修改工程ex03_02的文件main.xml、strings_hz.xml和MyFrameAct.java以顯示如圖3-25所示圖形,圖3-25中的標題和靜態(tài)文本框均顯示“西部牛仔”。首先在字符串資源文件strings_hz.xml中添加“西部牛仔”常量字符串即添加一行如下所示代碼:
<stringname="myWelcomeCowboy">西部牛仔</string>
在main.xml文件中為TextView添加ID號,即在“<TextVew”和“/>”之間添加以下語句:
android:id="@+id/tvMessage"
然后,在工程ex03_02的右鍵菜單中點擊“Refresh”子菜單,或直接按F5快捷鍵刷新工程,此時自動在“gen”目錄下生成新建資源的索引號,如圖3-26所示。圖3-25設(shè)置了標題和顯示文字的“西部牛仔”圖3-26自動生成資源索引最后,修改MyFrameAct.java文件如下所示:
1packagecn.jxufe.zhangenhe;
2
3importandroid.app.Activity;
4importandroid.graphics.Color;
5importandroid.os.Bundle;
6importandroid.widget.TextView;
7
8publicclassMyFrameActextendsActivity{
9 privateTextViewtextview;
10/**Calledwhentheactivityisfirstcreated.*/
11@Override
12publicvoidonCreate(BundlesavedInstanceState){
13super.onCreate(savedInstanceState);
14setContentView(R.layout.main);
15this.setTitle(R.string.myWelcomeCowboy);
16textview=(TextView)findViewById(R.id.tvMessage);
17textview.setText(R.string.myWelcomeCowboy);
18textview.setTextColor(Color.RED);
19}
20}在第9行中添加類MyFrameAct的私有靜態(tài)文本框類對象成員textview;在第15行調(diào)用setTitle方法設(shè)置活動界面的標題為R.string.myWelcomeCowboy即字符串“西部牛仔”。第16行通過findViewById方法由控件的資源ID號獲得控件實例(對象);第17行調(diào)用setText方法設(shè)置textview對象的顯示文字為R.string.myWelcomeCowboy即“西部牛仔”;第18行調(diào)用setTextColor方法設(shè)置字體顏色為紅色。
現(xiàn)在運行工程ex03_02,其運行結(jié)果將如圖3-25所示。 3.4Activity生命周期
Activity生命周期是指活動界面實例(對象)從創(chuàng)建到被Android操作系統(tǒng)關(guān)閉的整個生存周期,在這一過程中,Android系統(tǒng)將依次自動調(diào)用Activity的六種方法即OnCreate、OnStart、OnResume、OnPause、OnStop和OnDestroy。這六種方法相對于Android系統(tǒng)而言,類似于Activity的六個“鉤子”函數(shù)(鉤子函數(shù)是指掛接在某個方法中的空函數(shù),當擴展這個方法的功能時,只需要向其鉤子函數(shù)中添加特定代碼即可,而不用修改這個方法的語句)。Activity的生命周期如圖3-27所示,為力求表達準確無誤,這里直接引用了Android開發(fā)者手冊上的英文框圖。圖3-27Activity生命周期下面通過實例ex03_03說明圖3-27中各個方法的調(diào)用情況。由于onPause、onStop和onDestroy方法是被動執(zhí)行方法,特別是onDestroy方法,必須是Activity被關(guān)閉時才能調(diào)用??梢允褂檬录幚砑夹g(shù)(詳見第四章)調(diào)用Activity的finish方法關(guān)閉活動界面,此時會調(diào)用onDestroy方法。由于目前沒有介紹Android事件處理技術(shù),因此實例ex03_03沒有顯示onDestroy方法的調(diào)用。
例3.3Activity生命周期中各方法的調(diào)用順序。
新建工程ex03_03,在創(chuàng)建工程ex03_03的向?qū)е休斎霊?yīng)用名為MyOnFrameApp、包名為cn.jxufe.zhangenhe,活動界面名為MyOnFrameAct,最小SDK版本號為10。修改MyOnFrameAct.java文件內(nèi)容如下所示:
1packagecn.jxufe.zhangenhe;
2
3importandroid.app.Activity;
4importandroid.os.Bundle;
5importandroid.util.Log;
6
7publicclassMyOnFrameActextendsActivity{
8 privatestaticfinalStringTAG="MyOnFrameAct";
9/**Calledwhentheactivityisfirstcreated.*/
10@Override
11publicvoidonCreate(BundlesavedInstanceState){
12super.onCreate(savedInstanceState);
13setContentView(R.layout.main);
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- NB/T 11540-2024煤和巖石耐磨性測定方法
- 2025屆寧夏吳忠市高三上學(xué)期適應(yīng)性考試(一模)歷史試題(解析版)
- 《社區(qū)自治》課件
- 單位管理制度集合大全職員管理篇
- 單位管理制度匯編大全【人力資源管理】
- 單位管理制度合并選集人事管理
- 單位管理制度分享合集【人事管理】十篇
- 單位管理制度范例匯編【人力資源管理篇】十篇
- 單位管理制度呈現(xiàn)大全【人力資源管理篇】十篇
- 七年級英語Whatwouldyouliketohave課件
- 自然資源價格評估通則 TD/T 1061-2021
- 社區(qū)居家養(yǎng)老食堂方案策劃書(2篇)
- 2024年肺結(jié)節(jié)病的診斷與鑒別診斷講座課件
- 2023-2024學(xué)年浙江省寧波市余姚市九年級(上)期末英語試卷
- 《金融風險管理》期末復(fù)習試題及答案
- DZ/T 0462.4-2023 礦產(chǎn)資源“三率”指標要求 第4部分:銅等12種有色金屬礦產(chǎn)(正式版)
- 熱帶園林樹木學(xué)智慧樹知到期末考試答案章節(jié)答案2024年海南大學(xué)
- 《無機及分析化學(xué)》期末考試試卷附答案
- 2024年藥品集中采購合同范本(二篇)
- 微生物學(xué)(魯東大學(xué))智慧樹知到期末考試答案章節(jié)答案2024年魯東大學(xué)
- 玻璃制造過程綠色節(jié)能技術(shù)創(chuàng)新
評論
0/150
提交評論