為了保證Activity能對狀態改變響應,Android提供了一系列的事件處理器。當Activity在它的full、visible和active壽命中遷移時,會觸發這些處理器。圖3-8就Activity狀態而言,概述了這些壽命。
圖3-8
下面的架構代碼顯示了一個Activity中可利用的狀態變化事件的方法處理器。在每一個方法中都有一些提示,描述了在每個狀態變化事件裡建議採取的動作。
package com.paad.myapplication;
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity {
// 在full壽命的開始調用。
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// 初始化Activity。
}
// 在onCreate結束後調用,用來恢複UI狀態。
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// 從savedInstanceState恢複UI狀態。
// bundle對象同樣在onCreate方法中被傳入。
}
// 在visible壽命之前被調用。
@Override
public void onRestart(){
super.onRestart();
// 載入變更。這個Activity已經可見過。
}
// 在visible壽命的開始調用。
@Override
public void onStart(){
super.onStart();
// 應用需要的UI變更。現在,Activity可見。
}
// 在active壽命的開始調用。
@Override
public void onResume(){
super.onResume();
// 恢複暫停UI更新、線程或者當其inactive時被暫停所需進程。
}
// 在active壽命結束調用來儲存UI狀態變化。
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// 儲存UI狀態變化到savedInstanceState中。
// 當進程被殺死或重啟時這個bundle會傳入到onCreate方法。
super.onSaveInstanceState(savedInstanceState);
}
// 在active壽命結束調用。
@Override
public void onPause(){
// 中止UI更新、線程或CPU強烈的進程(當Activity不再是active前台Activity時不需要被更新)
super.onPause();
}
// 在visible壽命結束調用。
@Override
public void onStop(){
// 中止UI更新、線程或者Activity不可見時不需要的進程
// 儲存資料和狀態變化。
// 當這個被調用後,進程可能被殺死。
super.onStop();
}
// 在full壽命結束調用。
@Override
public void onDestroy(){
// 清除任何資源,包括結束線程,關閉資料庫連接等。
super.onDestroy();
}
}
如上面的程式碼片段所示,當你override這些事件處理函數時,必須總是調用父類的函數。