生命週期
Activity 類中定義了7 個回調方法,覆蓋了活動生命週期的每一個環節。以下7 個方法中除了onRestart()方法,其他都是兩兩相對的。
-
onCreate()。這每個活動中我們都重寫了這個方法,它會在活動第一次被創建的時候調用。你應該在這個方法中完成活動的初始化操作,比如說加載佈局、綁定事件等。
-
onStart()。這個方法在活動由不可見變爲可見的時候調用,對資源進行加載。
-
onResume()。這個方法在活動準備好和用戶進行交互的時候調用。此時的活動一定位於返回棧的棧頂,並且處於運行狀態。
-
onPause()。這個方法在系統準備去啓動或者恢復另一個活動的時候調用。我們通常會在這個方法中將一些消耗CPU 的資源釋放掉,以及保存一些關鍵數據,但這個方法的執行速度一定要快,不然會影響到新的棧頂活動的使用。
-
onStop()。這個方法在活動完全不可見的時候調用,對資源進行釋放。它和onPause()方法的主要區別在於,如果啓動的新活動是一個對話框式的活動,那麼onPause()方法會得到執行,而onStop()方法並不會執行。
-
onDestroy()。這個方法在活動被銷燬之前調用,之後活動的狀態將變爲銷燬狀態。
-
onRestart()。這個方法在活動由停止狀態變爲運行狀態之前調用,也就是活動被重新啓動了。
活動被回收前的數據保存與恢復
onSaveInstanceState()回調方法可以保證在活動被回收之前一定會被調用,因此我們可以通過這個方法來解決活動被回收時臨時數據得不到保存的問題。
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("key", "value");
}
使用的onCreate()方法其實也有一個Bundle 類型的參數。這個參數在一般情況下都是null,但是如果在活動被系統回收之前有通過onSaveinstanceState()方法來保存數據的話,這個參數就會帶有之前所保存的全部數據。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null){
String value = savedInstanceState.getString("key");
}
}