版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第3章Android核心組件——Activity本章簡介Activity是Android應(yīng)用為方便用戶操作而提供的一種可視化界面。它是Android應(yīng)用程序的重要組成部分,也是Android應(yīng)用開發(fā)的核心組件之一。本章將在對Activity基本概念進(jìn)行介紹的基礎(chǔ)上,重點(diǎn)講解Activity的創(chuàng)建、注冊、啟動和銷毀等方法,最后,詳細(xì)分析Activity的生命周期。本章目錄3.1Activity的基本概念 3.2創(chuàng)建、配置和注冊Activity 3.3啟動Activity 3.4銷毀Activity 3.5Activity的生命周期與加載模式 3.6小結(jié) 3.7習(xí)題 3.1Activity的基本概念A(yù)ctivity是一種Android應(yīng)用組件,它為用戶提供一種交互窗口,例如撥打電話,照相,發(fā)送電子郵件或者瀏覽地圖等。在Android應(yīng)用中,交互窗口內(nèi)顯示什么樣的信息,支持用戶進(jìn)行什么方式的交互操作,以及應(yīng)用程序如何對用戶操作進(jìn)行響應(yīng)都需要使用Activity進(jìn)行開發(fā)。一般而言,Activity通常是全屏窗口,鋪滿整個(gè)屏幕。此外,還可以用浮動窗口方式將Activity呈現(xiàn)給用戶。Android應(yīng)用程序通常由多個(gè)彼此松散綁定的Activity組成。通常,應(yīng)用程序都會指定其中的一個(gè)Activity為主Activity,在首次啟動應(yīng)用程序時(shí)將該Activity提供給用戶操作。然后,每個(gè)Activity可以啟動其它Activity來執(zhí)行不同的操作。當(dāng)一個(gè)新的Activity啟動后,前一個(gè)Activity都會被暫停運(yùn)行,并被系統(tǒng)保留在后臺堆棧中(“后堆?!保?。3.2創(chuàng)建、配置和注冊Activity3.2.1Activity基類 3.2.2創(chuàng)建Activity 3.2.3Activity界面顯示與應(yīng)用程序邏輯 3.2.4注冊Activity 3.2.1Activity基類與開發(fā)Java應(yīng)用類似,創(chuàng)建自定義Activity需要根據(jù)應(yīng)用功能的要求,選擇并繼承自不同的Activity基類。例如,當(dāng)交互內(nèi)容在一個(gè)屏幕內(nèi)無法完整顯示時(shí),可考慮將自定義的Activity類從ListActivity類繼承;而如果交互界面需要實(shí)現(xiàn)標(biāo)簽頁效果,則應(yīng)考慮將自定義的Activity類從TabActivity類繼承。3.2.1Activity基類右圖是AndroidSDK25.0.3版本中Activity類的繼承關(guān)系圖,從該圖可以看出,所有Activity類都直接或間接繼承自Context、ContextWrapper和ContextThemeWrapper這三個(gè)基類。3.2.2創(chuàng)建Activity當(dāng)完成了對某個(gè)Activity類的定義后,何時(shí)實(shí)例化這個(gè)類的對象、何時(shí)調(diào)用它所包含的系統(tǒng)運(yùn)行方法,由Android系統(tǒng)自動通過對相關(guān)函數(shù)的回調(diào)完成,大大降低了Android應(yīng)用的開發(fā)難度。為了讓Activity對象能夠響應(yīng)用戶發(fā)出的交互請求,創(chuàng)建自定義Activity類時(shí)需覆寫或?qū)崿F(xiàn)Activity基類中的多個(gè)方法。在這些方法中,最常用到的一個(gè)是onCreate(BundlesavedInstanceState),當(dāng)Activity對象被應(yīng)用程序創(chuàng)建時(shí),它是第一個(gè)被Android系統(tǒng)回調(diào)的方法。在覆寫該方法時(shí),可使用setContentView(Viewview)函數(shù)關(guān)聯(lián)Activity對象的顯示窗口,進(jìn)一步地,可使用findViewById(intid)函數(shù)獲得顯示窗口中的子控件對象,從而對子控件的屬性進(jìn)行讀寫。3.2.2創(chuàng)建Activity例1:包含三個(gè)Activity的Android應(yīng)用下面,將創(chuàng)建一個(gè)包含了三個(gè)Activity的Android應(yīng)該程序,說明Activity的創(chuàng)建方法。3.2.2創(chuàng)建Activity本示例程序指包含3個(gè)用戶界面(Activity)。MainActivity是應(yīng)用程序的啟動界面,它有兩個(gè)按鈕:BUTTON_1和BUTTON_2。3.2.2創(chuàng)建Activity單擊BUTTON_1按鈕后,用戶界面將跳轉(zhuǎn)至FirstActivity,并顯示出“ThisisFirstActivity!”提示文字如圖所示。3.2.2創(chuàng)建Activity單擊BUTTON_2按鈕后,用戶界面將跳轉(zhuǎn)至SecondActivity,該界面有一個(gè)輸入框和一個(gè)“確定”按鈕。3.2.2創(chuàng)建Activity當(dāng)用戶單擊SecondActivity中的“確定”按鈕之后,將關(guān)閉該窗口,并將輸入框中輸入的文字回傳到MainActivity中,由MainActivity將回傳的內(nèi)容顯示在BUTTON_2按鈕下面。3.2.2創(chuàng)建Activity創(chuàng)建項(xiàng)目步驟如下:1)打開Androidstudio,選擇【StartanewAndroidStudioproject】,如圖所示。3.2.2創(chuàng)建Activity2)在【NewProject】頁面中輸入新建項(xiàng)目的名稱,如圖所示。3.2.2創(chuàng)建Activity3)在項(xiàng)目類型中勾選【PhoneandTablet】,并選擇兼容的SDK版本,如圖所示。3.2.2創(chuàng)建Activity4)選擇空白模板,新增Activity,點(diǎn)擊Finish按鈕,如圖所示。3.2.2創(chuàng)建Activity5)右鍵單擊左側(cè)項(xiàng)目視圖下的app/src/main/java/com.example.activitytest,在彈出的菜單選擇New→Activity→EmptyActivity彈出創(chuàng)建Activity對話框,將Activity命名為MainActivity,同時(shí)勾選“GenerateLayoutFile”、“LauncherActivity”和“BackwardsCompatibility”這三個(gè)選項(xiàng),如圖所示。勾選“GenerateLayoutFile”指示AndroidStudio自動為MainActivity創(chuàng)建相應(yīng)的布局文件,勾選“LauncherActivity”表示MainActivity會被設(shè)置成為當(dāng)前項(xiàng)目的啟動界面,勾選BackwardsCompatibility表示應(yīng)用程序啟用向下兼容模式。最后,點(diǎn)擊“Finish”按鈕完成MainActivity的創(chuàng)建。3.2.2創(chuàng)建Activity6)重復(fù)步驟5,將“ActivityName”和“LayoutName”分別修改為FirstActivity和activity_first,勾選“GenerateLayoutFile”,同時(shí)取消對“LauncherActivity”的勾選,如圖所示。3.2.2創(chuàng)建Activity7)重復(fù)步驟6,將“ActivityName”和“LayoutName”分別修改為SecondActivity和activity_second,如圖所示。3.2.2創(chuàng)建Activity上述三個(gè)Activity創(chuàng)建完成后,示例程序的項(xiàng)目視圖結(jié)構(gòu)如圖所示。3.2.2創(chuàng)建Activity在項(xiàng)目視圖中,雙擊打開AndroidStudio為第一個(gè)Activity生成的MainActivity.java文件,代碼框架如右圖所示。MainActivity類中的onCreate(…)函數(shù)由AndroidStudio自動生成,它通過調(diào)用父類的super.onCreate(…)函數(shù),完成對Activity的初始化;然后使用setContentView(…)函數(shù)設(shè)置Activity的界面顯示。在onCreate(…)函數(shù)的代碼框架中,應(yīng)用程序可根據(jù)需要靈活地向Activity對象添加窗口顯示之前待處理的邏輯代碼。3.2.3Activity界面顯示與應(yīng)用程序邏輯Android應(yīng)用程序開發(fā)的一條重要原則是將Activity界面顯示和應(yīng)用程序邏輯分離。Activity界面顯示內(nèi)容由布局文件定義,每個(gè)Activity都有一個(gè)布局文件。如圖,AndroidStudio將布局文件集中存放在項(xiàng)目視圖的app/src/main/res/layout目錄下。3.2.3Activity界面顯示與應(yīng)用程序邏輯1)首先,為示例1中的MainActivity對象設(shè)計(jì)顯示界面。在項(xiàng)目視圖中,雙擊打開“activity_main.xml”文件,編寫如右圖所示代碼。代碼解釋:該代碼段使用XML標(biāo)簽定義了一個(gè)LinearLayout(線性布局),并在布局中加入了兩個(gè)Button控件和一個(gè)TextView控件。其中,控件標(biāo)簽內(nèi)的Android:id="@+id/xxx"表示為控件指定一個(gè)名為xxx的標(biāo)識符,以便在應(yīng)用程序邏輯代碼中引用該控件;android:text="xxx"指定控件內(nèi)的顯示文字;android:textSize="xxdp"配置控件內(nèi)顯示文字的大?。籥ndroid:layout_width="xxx"和android:layout_height="xxx"分別配置控件的長度和高度。3.2.3Activity界面顯示與應(yīng)用程序邏輯2)然后,編寫MainActivity對象的應(yīng)用程序邏輯。在項(xiàng)目視圖中,雙擊打開“MainActivity.java”文件,找到onCreate(...)方法,添加如右圖所示代碼。代碼解釋:該代碼段首先使用AndroidSDK提供的setContentView()方法將頁面布局activity_main與MainActivity對象相關(guān)聯(lián);然后,調(diào)用findViewById()方法查找到頁面布局中定義的按鈕控件;最后,使用setOnClickListener()方法為按鈕控件綁定單擊事件處理邏輯。3.2.3Activity界面顯示與應(yīng)用程序邏輯類似地,雙擊打開“activity_first.xml”文件,編寫如右圖所示代碼,設(shè)計(jì)FirstActivity對象的顯示界面。3.2.3Activity界面顯示與應(yīng)用程序邏輯雙擊打開“FirstActivity.java”文件,添加如下代碼,將頁面布局activity_first與FirstActivity對象相關(guān)聯(lián)。3.2.3Activity界面顯示與應(yīng)用程序邏輯3)最后,雙擊打開“activity_second.xml”文件,編寫如右圖所示代碼,設(shè)計(jì)SecondActivity對象的顯示界面。3.2.3Activity界面顯示與應(yīng)用程序邏輯雙擊打開“SecondActivity.java”文件,找到onCreate()方法,添加如右圖所示代碼。代碼解釋:該代碼段首先調(diào)用setContentView()方法將頁面布局activity_second與SecondActivity對象相關(guān)聯(lián);然后,實(shí)例化一個(gè)Intent對象,將用戶在EditText控件中的輸入值獲取后保存到Intent對象中;最后,使用調(diào)用setResult()方法將成功狀態(tài)碼RESULT_OK和Intent對象回傳給父Activity(MainActivity對象),并關(guān)閉當(dāng)前顯示窗口。3.2.4注冊ActivityActivity只有在AndroidManifest.xml文件中聲明后,才能被Android系統(tǒng)所調(diào)用。在AndroidManifest.xml文件中對Activity的聲明,即注冊Activity。在項(xiàng)目視圖“app/src/main/”目錄中,雙擊打開AndroidManifest.xml文件,添加如右圖所示代碼。代碼解釋:該代碼段首先將<manifest/>標(biāo)簽中package屬性值設(shè)置為包名“com.example.activitytest”,指示項(xiàng)目的源代碼目錄;然后,將上文設(shè)計(jì)的Activity對象名放入到<activity/>標(biāo)簽內(nèi);最后,將其添加到<application/>標(biāo)簽內(nèi),表示某Activity對象是應(yīng)用程序的一個(gè)交互界面。3.3啟動ActivityIntent可以啟動Activity,啟動的方式有顯式啟動和隱式啟動兩種。顯示啟動就是通過Intent指定Activity類名的方法啟動Activity。隱式啟動則不需要指定Activity類名,只需要在構(gòu)造Intent時(shí)指定相應(yīng)的category(類別)、action(動作)和data(數(shù)據(jù))即可,具體啟動哪一個(gè)Activity由系統(tǒng)和用戶共同來決定。3.3.1顯式啟動 3.3.2隱式啟動 3.3.1顯式啟動顯式啟動主要有兩個(gè)步驟:首先創(chuàng)建一個(gè)Intent,指定啟動Activity的上下文和目標(biāo)Activity的類名;然后,調(diào)用startActivity()函數(shù)啟動新的Activity。例如,示例1通過為MainActivity中的“Button_1”按鈕添加單擊事件處理函數(shù),實(shí)現(xiàn)了對FirstActivity的顯式啟動。在創(chuàng)建Intent對象時(shí),可使用構(gòu)造函數(shù)Intent(ContextpackageContext,Class<?>cls)構(gòu)建出Activity之間的跳轉(zhuǎn)關(guān)系。在構(gòu)造函數(shù)中,第一個(gè)參數(shù)提供出目標(biāo)Activity的啟動上下文,即起始Activity的包名;第二個(gè)參數(shù)則用于指定目標(biāo)Activity的類名。當(dāng)Intent對象構(gòu)建完成后,便可調(diào)用AndroidSDK提供的系統(tǒng)函數(shù)startActivity()或startActivityForResult()來啟動目標(biāo)Activity。這兩個(gè)函數(shù)的原型如下:startActivity(Intentintent):以無返回值的方式啟動目標(biāo)Activity。startActivityForResult(Intentintent,intrequestCode):以指定的請求碼(requestCode)啟動目標(biāo)Activity,當(dāng)目標(biāo)Activity銷毀時(shí)將其運(yùn)行結(jié)果返回給調(diào)用者。3.3.2隱式啟動顯式啟動只適合啟動類名已知的Activity,這無疑會增加應(yīng)用組件之間的耦合度,不適合應(yīng)用程序的維護(hù)、升級。與顯式啟動相比,隱式啟動方法無需明確指定Activity的類名,便可跳轉(zhuǎn)到目標(biāo)Activity。目標(biāo)Activity既可以來自Android系統(tǒng),又可以來自已安裝的第三方應(yīng)用,還可以來自應(yīng)用程序自身。通過在AndroidManifest.xml文件中,為待被啟動的Activity添加<IntentFilter>標(biāo)簽,并在標(biāo)簽內(nèi)配置<action>和<category>屬性便可實(shí)現(xiàn)對該Activity的隱式啟動。例如,可打開AndroidManifest.xml文件,為FirstActivity添加如下代碼。3.3.2隱式啟動代碼解釋:該代碼段中,<action>標(biāo)簽設(shè)置由FirstActivity支持的操作名;<category>標(biāo)簽則是隱式啟動Activity必須配置的屬性??砂聪率龇绞叫薷氖纠?MainActivity中的“Button_1”按鈕的單擊事件處理函數(shù),實(shí)現(xiàn)對FirstActivity的隱式啟動。在創(chuàng)建Intent對象時(shí),可使用構(gòu)造函數(shù)Intent(Stringaction)構(gòu)建出隱式Intent,由action參數(shù)描述操作名。當(dāng)完成對系統(tǒng)函數(shù)startActivity()調(diào)用之后,操作系統(tǒng)便會根據(jù)Intent描述的操作查找符合條件的Activity,并自動啟動這些Activity。3.4銷毀Activity當(dāng)Activity執(zhí)行完畢,無需再顯示時(shí),為節(jié)省系統(tǒng)資源應(yīng)將其主動銷毀。Activity的主動銷毀方式主要有兩種:第一種是點(diǎn)擊Android系統(tǒng)中返回鍵,第二種則是調(diào)用由Activity類提供的finish()方法。需要注意的是,當(dāng)finish()方法調(diào)用完成后,Activity占用的系統(tǒng)資源并不會立即被Android系統(tǒng)釋放。雖然,Android應(yīng)用程序包含的多個(gè)Activity之間是一種松散綁定的關(guān)系。但是,當(dāng)目標(biāo)Activity被銷毀前,起始Activity往往會取回目標(biāo)Activity的運(yùn)行結(jié)果。例如,當(dāng)示例1中的SecondActivity退出后,會將用戶在“EditText”控件的輸入結(jié)果返回給MainActivity。3.4銷毀Activity可使用setResult(intresultCode,Intentdata)方法,將待銷毀Activity的結(jié)果返回給調(diào)用者。該函數(shù)第一個(gè)參數(shù)是返回結(jié)果的狀態(tài)標(biāo)識,一般取RESULT_CANCELED或RESULT_OK;第二個(gè)參數(shù)則用于保存返回結(jié)果。為返回示例1中SecondActivity的輸入結(jié)果,可為SecondActivity中的“確定”按鈕增加單擊事件處理函數(shù),并添加右側(cè)代碼。代碼解釋:該代碼段首先構(gòu)造出一個(gè)空的Intent對象用于暫存“EditText”控件的輸入結(jié)果;然后,使用Intent對象的putExtra()方法將輸入結(jié)果以鍵值對方式保存起來;接下來,調(diào)用setResult()方法將SecondActivity的結(jié)果返回;最后,調(diào)用finish()方法銷毀SecondActivity。3.4銷毀Activity為接收示例1中SecondActivity的輸入結(jié)果,需要調(diào)用startActivityForResult()函數(shù)啟動SecondActivity,并向MainActivity中重載的onActivityResult()方法添加右側(cè)代碼。代碼解釋:為取回由SecondActivity返回的結(jié)果,該代碼段重寫了onActivityResult(intrequestCode,intresultCode,Intentdata)方法。該函數(shù)第一個(gè)參數(shù)是在調(diào)用startActivityForResult()時(shí)設(shè)置的請求代碼標(biāo)識,第二個(gè)參數(shù)是目標(biāo)Activity返回結(jié)果的狀態(tài)標(biāo)識;第三個(gè)參數(shù)保存了目標(biāo)Activity的返回結(jié)果。它首先由請求代碼(requestCode)和返回結(jié)果狀態(tài)過濾出由SecondActivity返回的結(jié)果;然后,使用Intent對象的getExtras()方法取出結(jié)果;最后,將結(jié)果顯示到“TextView”控件上。3.5Activity的生命周期與加載模式Activity的生命周期指的是Activity從啟動到銷毀的完整過程。如何編寫出連貫流暢的應(yīng)用程序,如何更好地規(guī)避應(yīng)用程序的性能瓶頸,以及如何合理的管理應(yīng)用程序使用到的系統(tǒng)資源,都與Activity的生命周期管理有著密不可分的關(guān)系。3.5.1Activity返回棧 3.5.2Activity狀態(tài) 3.5.3Activity的生命周期 3.5.1Activity返回棧Android系統(tǒng)使用任務(wù)(Task)對Activity進(jìn)行管理,一個(gè)任務(wù)就是一組存放在返回棧里的所有的Activity集合。返回棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),當(dāng)啟動一個(gè)新的Activity時(shí),它將入棧,并置于棧頂;當(dāng)棧頂?shù)腁ctivity被銷毀時(shí),它將出棧,而前一個(gè)入棧的Activity則重新置于棧頂?shù)奈恢?。Android系統(tǒng)總是將處于棧頂?shù)腁ctivity顯示給用戶。如圖是Android系統(tǒng)中返回棧的工作示意圖。3.5.2Activity狀態(tài)在每個(gè)Activity生命周期中,它最多經(jīng)歷四種狀態(tài)。(1)運(yùn)行狀態(tài):當(dāng)Activity位于棧頂時(shí),它就處于運(yùn)行狀態(tài)。該狀態(tài)下的Activity完全可見,并能獲得用戶的輸入焦點(diǎn)。(2)暫停狀態(tài):當(dāng)Activity不再位于棧頂,但仍然可見時(shí),它就進(jìn)入了暫停狀態(tài)。該狀態(tài)下的Activity雖然仍然戶可見,但是不能獲得用戶的輸入焦點(diǎn)。(3)停止?fàn)顟B(tài):當(dāng)Activity不再位于棧頂,并且完全不可見的時(shí)候,它就進(jìn)入了停止?fàn)顟B(tài)。雖然該狀態(tài)下的Activity是不可見的,但Android系統(tǒng)仍然會為其保存運(yùn)行上下文。(4)銷毀狀態(tài):當(dāng)Activity從返回棧中移除后,它就進(jìn)入了銷毀狀態(tài)。該狀態(tài)下,Android系統(tǒng)會釋放Activity運(yùn)行時(shí)占用的系統(tǒng)資源。3.5.3Activity的生命周期如圖所示,Android系統(tǒng)為Activity定義了7個(gè)不同的回調(diào)函數(shù),覆蓋了Activity生命周期中的所有環(huán)節(jié),隨著Activity狀態(tài)的不斷變化,Android系統(tǒng)會自動回調(diào)這些函數(shù)。3.5.3Activity的生命周期(1)onCreate(BundlesavedStatus):它是啟動Activity后,第一個(gè)被回調(diào)的函數(shù)。當(dāng)開發(fā)Android應(yīng)用時(shí),通常會將Activity的初始化代碼(例如創(chuàng)建View、綁定數(shù)據(jù)或恢復(fù)數(shù)據(jù)等),放置到該函數(shù)內(nèi)。(2)onStart():當(dāng)Activity即將顯示在屏幕上時(shí)(此時(shí),用戶還不能與它進(jìn)行交互),該函數(shù)被自動調(diào)用。(3)onResume():當(dāng)允許用戶與Activity交互時(shí),該函數(shù)會被自動調(diào)用。此時(shí),Activity位于返回棧的棧頂,并處于運(yùn)行狀態(tài)。(4)onPause():當(dāng)Activity進(jìn)入暫停狀態(tài)時(shí)(部分遮擋),該函數(shù)被自動調(diào)用。當(dāng)開發(fā)Android應(yīng)用時(shí),通常會將資源釋放、持久數(shù)據(jù)保存或動畫關(guān)閉等代碼,放置到該函數(shù)內(nèi)。(5)onStop():當(dāng)Activity被完全隱藏時(shí),該方法會被自動調(diào)用。(6)onDestory():當(dāng)Activity被銷毀前,該函數(shù)被自動調(diào)用。(7)onRestart():當(dāng)Activity由停止?fàn)顟B(tài)進(jìn)入運(yùn)行狀態(tài)前,該方法會被自動調(diào)用。3.5.3Activity的生命周期在Activity狀態(tài)不斷變化的過程中,導(dǎo)致Activity狀態(tài)發(fā)生變化的事件是一一對應(yīng)的。因此,可按照Android系統(tǒng)激活A(yù)ctivity回調(diào)函數(shù)的順序,將Activity的生命周期劃分成三種,如圖所示。3.5.3Activity的生命周期(1)全生命周期全生命周期涵蓋Activity從啟動到銷毀的全過程,它始于onCreate(),結(jié)束于onDestroy()。通常應(yīng)在onCreate()中分配Activity運(yùn)行時(shí)使用到的系統(tǒng)資源,并在onDestroy()中完成對這些資源的釋放。(2)可視生命周期可視生命周期涵蓋Activity從可見到不可見的全過程,它始于onStart(),結(jié)束于onStop()。通常應(yīng)在onStart()方法中初始化、啟動或更新與用戶界面相關(guān)的資源,而在onStop()方法中暫停或停止與用戶界面相關(guān)的線程、計(jì)時(shí)器和服務(wù)等的運(yùn)行。(3)活動生命周期活動生命周期涵蓋Activity在屏幕的最上層,并能夠與用戶交互的過程,它始于onResume(),結(jié)束于onPause()。在活動生命周期內(nèi),Activity處于運(yùn)行狀態(tài),可以和用戶進(jìn)行交互操作。3.5.3Activity的生命周期下面,新建一個(gè)項(xiàng)目“ActivityLifeCycleTest”,說明在Activity生命周期內(nèi)上述7個(gè)回調(diào)函數(shù)的調(diào)用順序。該項(xiàng)目包含了三個(gè)Activity:MainActivity、NormalActivity和DialogActivity。其中,MainActivity有三個(gè)按鈕,第一個(gè)按鈕用于啟動NormalActivity,第二個(gè)按鈕用于啟動DialogActivity,第三個(gè)按鈕則用于退出MainActivity,如圖所示。3.5.3Activity的生命周期在MainActivity中覆寫Activity生命周期中的所有回調(diào)函數(shù),并用日志方式在LogCat窗口打印出各個(gè)回調(diào)函數(shù)的執(zhí)行順序,MainActivity類的代碼如下。3.5.3Activity的生命周期為啟動NormalActivity、DialogActivity,銷毀MainActivity,該代碼段重寫了onCreate()方法,并分別為界面的三個(gè)按鈕綁定了單擊事件處理邏輯。然后,通過對Activity生命周期其余回調(diào)函數(shù)的覆寫,打印出Activity狀態(tài)發(fā)生變化時(shí)回調(diào)函數(shù)的調(diào)用信息。在AndroidManifest.xml文件中,將MainActivity設(shè)置為啟動Activity。運(yùn)行程序,觀察AndroidStudio的LogCat窗口,如圖所示。3.5.3Activity的生命周期可以看到,當(dāng)MainActivity初次啟動顯示時(shí)會按照時(shí)間順序依次打印出onCreate()、onStart()和onResume()方法執(zhí)行時(shí)的輸出日志。它表明當(dāng)Activity初次啟動時(shí),onCreate()、onStart()和onResume()方法會依此被Android系統(tǒng)調(diào)用。點(diǎn)擊NORMAL按鈕,啟動NormalActivity,如圖所示。3.5.3Activity的生命周期觀察LogCat窗口打印出的日志信息,如圖所示。由于NormalActivity已經(jīng)把MainActivity完全遮蓋住,因此Android系統(tǒng)將依次調(diào)用MainActivity的onPause()和onStop()方法。3.5.3Activity的生命周期按下模擬器Back鍵,返回到MainActivity,觀察LogCat窗口打印出的日志信息,如圖所示。由于此前MainActivity被完全遮蓋(停止?fàn)顟B(tài)),因此Android系統(tǒng)會首先調(diào)用onRestart()方法,然后再依次執(zhí)行onStart()和onResume()方法,并再次顯示MainActivity。3.5.3Activity的生命周期點(diǎn)擊DIALOG按鈕,啟動DialogActivity,如圖所示。3.5.3Activity的生命周期觀察LogCat窗口打印出的日志信息,如圖所示。由于MainActivity并沒有被完全遮蓋(暫停狀態(tài)),因此Android系統(tǒng)只調(diào)用了onPause()方法。3.5.3Activity的生命周期按下模擬器Back鍵返回到MainActivity,觀察LogCat窗口打印出的日志信息,如圖所示。由于此前MainActivity沒有被完全遮蓋(暫停狀態(tài)),因此,當(dāng)它再次顯示時(shí),Androi
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度燒結(jié)磚生產(chǎn)設(shè)備維修保養(yǎng)及升級合同2篇
- 昆明云南昆明市五華區(qū)城居保中心招聘公益崗位人員筆試歷年參考題庫附帶答案詳解
- 2025版新勞動法下企業(yè)勞動安全衛(wèi)生管理合同3篇
- 安徽2025年安徽汽車職業(yè)技術(shù)學(xué)院教職工校園招聘筆試歷年參考題庫附帶答案詳解
- 二零二五年度草原生態(tài)修復(fù)與生態(tài)農(nóng)業(yè)發(fā)展合同2篇
- 二零二五年度綠色建筑節(jié)能改造合同9篇
- 2025年浙科版必修2歷史上冊月考試卷含答案
- 2025年粵教新版必修3生物下冊月考試卷含答案
- 2025年岳麓版七年級科學(xué)上冊月考試卷
- 2025年中圖版高三歷史上冊月考試卷
- 煤礦反三違培訓(xùn)課件
- 向流程設(shè)計(jì)要效率
- 安全文明施工的管理要點(diǎn)
- 2024年中國航空發(fā)動機(jī)集團(tuán)招聘筆試參考題庫含答案解析
- 當(dāng)代中外公司治理典型案例剖析(中科院研究生課件)
- GMP-基礎(chǔ)知識培訓(xùn)
- 動力管道設(shè)計(jì)手冊-第2版
- 2022年重慶市中考物理試卷A卷(附答案)
- Python繪圖庫Turtle詳解(含豐富示例)
- 煤礦機(jī)電設(shè)備檢修技術(shù)規(guī)范完整版
- 榆林200MWp并網(wǎng)光伏發(fā)電項(xiàng)目可行性研究報(bào)告
評論
0/150
提交評論