Activity生命週期詳解(三)

2021-07-14 17:29:41 字數 2094 閱讀 3917

三、停止與重啟 activity

恰當的停止與重啟我們的activity是很重要的。在activity生命週期中,他們能夠確保使用者感知到程式的存在並不會丟失他們的進度。在下面一些關鍵的場景中會涉及到停止與重啟:

activity類提供了onstop()與onrestart()方法來允許在activity停止與重啟時進行呼叫。不同於暫停狀態的部分阻塞ui,停止狀態是ui不再可見並且使用者的焦點轉移到另乙個activity中。

note:因為系統在activity停止時會在記憶體中儲存activity的例項,所以有時不需要實現onstop(),onrestart(),甚至是onstart()方法。因為大多數的activity相對比較簡單,activity會自己停止與重啟,我們只需要使用onpause()來停止正在執行的動作並斷開系統資源鏈結。

figure 1,上圖顯示,當使用者離開我們的activity時,系統會呼叫onstop()來停止activity(1).這個時候如果使用者返回,系統會呼叫onrestart(2),之後會迅速呼叫onstart(3)與onresume(4).請注意:無論什麼原因導致activity停止,系統總是會在onstop()之前呼叫onpause()方法。

2.停止activity

儘管onpause()方法是在onstop()之前呼叫,我們應該使用onstop()來執行那些cpu intentsive的shut-down操作。例如往資料庫寫資訊。

例如,下面是乙個onstop()的方法裡面儲存筆記草稿到presistent storage的示例:

@override

protected void onstop()

activity已經停止後,activity物件會儲存在記憶體中,並在activity resume時被重新呼叫。我們不需要在恢復到resumed state狀態前重新初始化那些被儲存在記憶體中的元件。系統同樣儲存了每乙個在布局中的檢視當前狀態,如果使用者在edittext元件中輸入了text,它會被儲存,因此不需要儲存與恢復它。

note:即使系統在activity stop時停止這個activity,它仍然會儲存view物件的狀態(比如edittext中的文字)到乙個bundle中,並且在使用者返回這個activity時恢復他們(下一節會介紹在activity銷毀與重新建立時如何使用bundle來儲存其他資料的狀態)。

3.啟動與重啟activity

當activity從stopped狀態回到前台時,它會呼叫onrestart(),系統再呼叫onstart()方法,onstart()方法會在每次activity可見時都會被呼叫。onrestart()方法則是只在activity從stopped狀態恢復時才會被呼叫,因此我們可以使用它來執行一些特殊的恢復工作,請注意之前是stopped而不是destory

使用onrestart()恢復activity不是太常見的,因此對於這個方法的如何使用沒有任何的guidelines. 然而,因為onstop()方法應該所清除所有activity資源的操作,我們需要在重啟activity時重新例項化那些被清除的資源,同樣,我們也需要在activity第一次建立時例項化那些資源。介於上面的原因,應該使用onstart()作為onstop()所對應的方法。因為系統會在建立activity與從停止狀態重啟activity都會呼叫onstart()。也就是說onstop裡面做了那些清除的操作,就該在onstart()裡面重新把那些清除掉的資源重新建立出來。

例如,因為使用者很可能在回到這個activity之前已經過了很長一段時間,所以onstart()方法是乙個比較好的地方來驗證某些必須的系統特性是否可用。

@override

protected void onstart()

}@override

protected void onrestart()

當系統destroy我們的activity,它會為activity呼叫ondestroy()方法。因為我們會在onstop方法裡面做釋放資源的操作,那麼ondestroy方法則是我們最後去清除那些可能導致記憶體洩漏的地方。因此需要確保那些執行緒都被destroyed並且所有的操作都被停止。

Activity生命週期詳解

針對上述對生命的描述,可以從三個角度來對activity的生命週期進行劃分 1.完整的activity的生命週期。即從oncreate到ondestroy之間的整個過程。2.可見的activity的生命週期。即從onstart到onstop之間的整個過程,在這個期間,activity一直處於可見的狀...

Activity生命週期詳解

在android應用程式裡,乙個activity就是乙個使用者介面。使用者與程式的互動就是通過activity來實現的,可以看成 的頁面。主activity是程式啟動的入口。應用程式成功啟動之後,呈獻給使用者的第乙個介面,即為該程式的主activity。android 的虛擬機器 vm 是使用基於棧...

Activity生命週期

oncreate 設定activity所使用的布局檔案 按鈕繫結 等靜態設定操作 onstart 該activity能被我們看到的時候就會呼叫onstart onresume 能夠獲得使用者焦點 onpause 啟動另外乙個activity的時候就會呼叫第乙個activity的該方法 onstop ...