1. 程式人生 > 其它 >Android基礎——Activity的生命週期

Android基礎——Activity的生命週期

該文章為郭霖所著《第一行程式碼》第三版中第三章第四節內容的高度概括

android是使用任務(task)來管理Activity的,一個任務就是一組存放在棧裡的Activity集合,這個棧也被稱作返回棧(back stack)。

Activity狀態

每個Activity在其生命週期最多可能有四種狀態

1.執行轉態

當一個Activity位於返回棧的棧頂位置,Activity就處於執行狀態。(十分可靠,系統最不願意收回的

2.暫停狀態

當一個Activity不在棧頂位置,但仍然可見時,Activity就進入了暫停狀態(比較可靠,只有在記憶體極低的情況下,系統才會考慮回收

3.停止狀態

當一個Activity不再處於棧頂位置,並且處於完全不可見的時候,就進入了停止狀態(不太可靠的,當其他地方需要記憶體時,就有可能被收回

4.銷燬狀態

一個Activity從返回棧中移除後就變成了銷燬狀態。(系統最傾向回收這種Activity,以保證系統記憶體充足

Activity的生存週期

Activty類中定義了7個回撥方法,覆蓋了Activity的生命週期的每一個環節。

onCreate(){

}
/* 在Activity第一次被呼叫的時候呼叫。在此方法中進行Activity的初始化操作,比如載入佈局、繫結事件等 */
onStart(){

}
/* 這個方法在Activity由不可見變為可見的時候呼叫。 */ 
onResume(){

}
/* 這個方法在Activity準備好和使用者進行互動的時候呼叫,此時該Activity一定位於棧頂,並且處於執行狀態。 */
onPause(){

}
/* 這個方法在系統準備去啟動或者恢復另一個Activity的時候呼叫。我們會在這個方法中將一個消耗CPU的資源釋放掉。 */
onStop(){

}
/* 這個方法在Activity完全不可見的時候呼叫。與onPause的區別在於,一個不可見一個可見 */
onDestory(){

}
/* 這個方法在Activity銷燬之間呼叫 */
onRestart(){

}
/* 這個方法由停止狀態變為執行狀態之前呼叫,也就是Activity被重新啟動了 */

Activity被回收了怎麼辦

問題:

當一個Activity處於停止狀態是有可能被系統回收的,當返回該Activity時呼叫的是onCreate方法而不是onRestart方法,這種情況就是重新建立了該Activity,這就會導致原本存在Activity的資料丟失。

解決:

Activity中提供了一個onSaveInstanceState()的回撥方法,這個方法保證在Activity在回收之前一定會被呼叫,因此我們可以通過這個方法來解決問題