国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

第十三章 Activity與生命周期

2018-02-24 15:47 更新

第十三章 Activity與生命周期

Activity生命周期并不僅僅在用戶運行應用程序之后才開始生效,事實上它也影響著用戶切出以及切回應用時得到的不同反饋。當我們開發(fā)一款應用時,首先需要牢記一點:用戶會經常在執(zhí)行過程中、在我們的應用與其它應用之間頻繁切換。取決于用戶的操作方式,同一款應用程序有時在前臺運行、有時則在后臺運行。大家必須保證自己的應用能夠就會這類情況,并在此類切換過程中及時保存并恢復數據。再次提醒各位,這一過程對于某些特定應用程序略有不同——例如功能性組件。

1. 回調方法

第一步

為了控制Activity處于不同狀態(tài)下時應用程序的運行方式,例如當用戶切出或者切回應用,大家可以選擇多種處理方法。這類方法也就是 Activity生命周期回調方法。Android系統(tǒng)會在我們的Activity進入某種特定狀態(tài)后調用這些方法,從而通過一系列步驟確保我們的應用程 序能夠繼續(xù)起效、不至于丟失數據而且在用戶不與之交互時不會使用非必要性資源。每一種回調方法都會讓我們的應用進入一種可能的狀態(tài)。

如果大家之前曾經接觸過Java應用程序的編程工作,那么應該已經發(fā)現Android應用程序的啟動遵循另一種方式。與Java應用直接使用主方法 不同,Android在啟動后會首先執(zhí)行主Activity類中的onCreate方法。請記住,我們已經在清單中將該類指定為主啟動Activity。 Activity會首先回調onCreate方法,相當于重復用戶啟動應用程序后的流程。這時候onCreate方法會使應用程序進入Created狀態(tài)。

開發(fā)者指南當中通過示意圖以直觀方式介紹了生命周期、回調方法以及狀態(tài)的概念。其中onResume方法負責提供Resumed狀態(tài),這時我們的應 用程序可以接受用戶的直接操作。其它各類回調方法都以onResume為核心,即將應用程序引導至Resumed狀態(tài)或者從該狀態(tài)脫離、啟動該狀態(tài)或者將其停止。

對于大部分應用程序來說,我們只需要使用一部分回調方法,但最起碼要用到onCreate。雖然使用頻率不高,但了解全部回調及狀態(tài)的作用將幫助我 們了解自己的應用程序在運行及停止運行時,Android系統(tǒng)會受到怎樣的影響。一般情況下,大家需要保證用戶能夠在任何操作過程切換出去之后、都能順利 恢復到之前的運行狀態(tài);如果他們通過導航選擇前進或者后退,應用則需保存全部必要數據并釋放不必要占用的硬件資源。

第二步

我們的應用程序可能處于以下五種狀態(tài),分別為:Created、Started、Resumed、Paused以及Stopped。另有七種回調方 法能夠讓應用進入或者脫離上述狀態(tài),它們分別是:onCreate、onStart、onRestart、onResume、onPause、 onStop以及onDestroy。這些方法能夠讓我們的應用程序在可能的狀態(tài)之間進行切換,而且某些情況下切換速度會很快。通常來說,大家可以認為自 己的應用程序始終處于resumed、paused或者stopped這三種狀態(tài)之下,因為其它狀態(tài)都是暫時性的。

當我們的應用程序正處于運行當中且用戶與之進行操作交互,這時的應用狀態(tài)為Resumed;當另一個Activity處于前臺但僅僅使我們的應用被 部分隱藏時,這時的應用狀態(tài)為Paused——在這種狀態(tài)下用戶無法再與應用進行交互。當我們的應用完全處于后臺之下,而且用戶既無法操作、也無法觀看到 它時,其狀態(tài)即為Stopped。在這種狀態(tài)下Activity會保留之前的所有數據,但無法加以執(zhí)行。

2. 進入Resumed狀態(tài)

如我們所知,主Activity會在應用程序啟動時開始運行,onCreate方法也將執(zhí)行、從而讓我們準備該類所需要的Activity UI以及全部數據條目。我們創(chuàng)建的大部分應用當中都包含不只一個Activity,其它Activity會在用戶與應用程序進行操作交互時啟動。大家可以 利用以下代碼通過Intent類啟動另一個非主Activity:

Intent aboutIntent = new Intent(this, About.class);
startActivity(aboutIntent);

這代表著應用程序包中另一個名為“About”的Activity類。大家可以通過選擇自己的源碼包而后選擇“文件”、“新建”、“類”的方式在 Eclipse當中創(chuàng)建一個新Activity,而后將該Android Activity類選定為超級類。請記住,每一個Activity都必須在我們的應用程序清單當中列出。大家還可以利用Intent類實現不同 Activity之間的數據轉移。

當一個Activity處于運行當中時,onCreate方法也在同時執(zhí)行,因此除了把其它Activity類列入清單之外、大家也能夠以與主 Activity類似的方式在應用程序當中處理這些類。我們也可以為每個Activity創(chuàng)建一個布局文件,并通過設置讓其使用與主Activity同樣 的技術機制。

在某個Activity的onCreate方法開始執(zhí)行之后,onStart與onResume兩個方法也將開始執(zhí)行, 從而使該Activity處于Resumed狀態(tài)、并在后續(xù)執(zhí)行過程中根據情況轉換為Created以及Started狀態(tài)。

我們的Activity可以通過不只一種方式進入Resumed狀態(tài),應用程序啟動只是其中最基本的途徑。如果Activity處于Paused或 者Stopped狀態(tài),則應用程序切換至當前之后該Activity將直接進入前臺運行模式,且無需重復調用onCreate方法。如果大家的應用從 Paused狀態(tài)切換回Resumed狀態(tài),則Activity的onResume方法將開始執(zhí)行。如果該應用由Stopped狀態(tài)切換回運行狀態(tài),則執(zhí) 行onRestart方法、而后依次為onStart與onResume方法。

3.進入Destroyed狀態(tài)

第一步

當我們的應用程序處于退出或者隱藏狀態(tài)下,則Resumed就會轉變?yōu)镈estroyed。這時候,onPause方法會將應用的Activity 由運行時的Resumed狀態(tài)轉換為Paused狀態(tài)。在onPause當中,大家應當停止任何需要占用資源的任務,例如動畫播放、傳感器數據處理以及廣 播接收等等。如果onPause正在執(zhí)行,那么onStop也可以開始執(zhí)行,因為用戶此時通常已經通過導航退出了我們的應用程序。大家還可以利用 onPause方法進行數據保存——雖然通常來說數據保存工作由onStop方法來負責最為妥當。

正如我們之前曾經提到,大家的Activity能夠通過onResume方法從Paused狀態(tài)重新回歸至Resumed狀態(tài)。這意味著我們可以利 用onResume來恢復任何我們之前在onPause當中停止或者發(fā)布過的內容。不過大家還需要記住一點,onResume在其它情況下也會付諸執(zhí)行, 例如在應用程序啟動時。

第二步

在onPause之后,如果應用程序進入Stopped狀態(tài),那么onStop也將開始執(zhí)行。在這種情況下,onRestart、onStart以 及onResume等方法仍然能夠使應用程序重新回到Resumed狀態(tài)。在onStop中,大家應當盡可能壓縮只在必要數據的操作量,例如向數據庫中寫 入內容。請大家確保在onStop當中囊括了所有應用程序所使用的資源,從而避免該應用在被徹底關閉之后導致內存溢出問題。

這套系統(tǒng)會在應用程序從resumed狀態(tài)切換至stopped狀態(tài)后保存特定數據,例如視圖中需要顯示的內容。當某個Activity從 Stopped狀態(tài)恢復到Resumed狀態(tài)時,onRestart、onStart以及onResume方法都會開始執(zhí)行。不過onStart與 onResume的執(zhí)行情況有所不同——例如在應用程序啟動之時。而onRestart方法只會在應用程序從Stopped狀態(tài)恢復至前臺之后才會執(zhí)行, 這樣大家就能利用它來恢復任何保存在onStop當中的運行內容。

提示:當大家從一個Activit之下啟動另一個Activity時,前者會進入Stopped狀態(tài)。如果用戶隨后利用后退按鈕再次由后者返回先前的Activity當,那么前者的onRestart方法就會開始執(zhí)行。

第三步

如果大家的應用程序即將徹底關閉,例如我們的當前Activity被從系統(tǒng)當中移除,則onDestroy方法會開始執(zhí)行。盡管這是在我們的 Activity完全消失之前執(zhí)行的最后一個方法,大家仍然不應該簡單地將所有內容一股腦清除。事實上,我們需要利用onStop或者onPause來處 理結束工作。當然也有例外情況,如果應用程序的后臺進程仍然處于運行狀態(tài),那么這時候大家應該在onDestroy當中將其停止。

在onDestroy執(zhí)行之后,如果用戶通過導航返回應用程序Activity,則對應onCreate方法將再次被啟動。一般情況下,大家可以假 設onPause與onStop會在onDestroy之前執(zhí)行。不過如果大家明確調用finish方法來結束一個Activity,則只有 onDestroy會被執(zhí)行。

在多數情況下,我們并不需要為應用程序當中的生命周期回調問題投入過多精力,因為大家完全可以利用onCreate方法的參數實現數據保留效果。在 Activity onCreate方法當中,Bundle參數負責如前所述自動進行視圖信息保存。不過大家也可以利用該對象保存更多數據內容,例如記錄用戶與應用程序之間 的交互所產生的變量更新。要實現這一目標,大家可以在Activity類當中使用onSaveInstanceState方法,完成數據鍵值對的編寫之 后、我們就可能在onCreate當中將其恢復。

提示:當用戶改變設備顯示模式時,也就是在縱向及橫向模式間進行切換,我們的Activity實際上會經歷重新創(chuàng)建、onCreate也會被再次執(zhí) 行。這一過程被我們稱為配置變化。在這種情況下,系統(tǒng)會假設大家需要重新創(chuàng)建Activity,例如大家在每種顯示模式下使用不同的布局方案。不過在多數 情況下,大家可能不希望系統(tǒng)照此辦理。為了避免我們的Activity在顯示模式轉換時發(fā)生重新創(chuàng)建,大家可以從兩種解決方式中作出選擇:向清單內的 Activity添加“android:configChanges”屬性,或者調整我們的Activity結構、利用我們在配置變量時所保留的 Fragments。

總結

當大家開始學習如何為Android平臺開發(fā)應用程序時,Activity當中所涉及的大量狀態(tài)與回調方法可能會成為很多難題乃至混亂的根源。然而在大多數情況下,我們只需要采用最低數量的方法以確保自己的應用程序有能力提供用戶所預期的功能與效果。在本系列教程的下一篇當中,我們將共同了解部分常用Android類,大家很可能會在自己的第一款應用當中與它們打交道。在此之后,我們將著眼于Android代碼示例、需要了解的應用程序發(fā)布知識以及其它一些關于今后進一步學習的建議。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號