Activity的生命週期:
一共有三種狀態分別爲運行狀態、暫停狀態、以及停止狀態。
運行狀態:當Activity在屏幕最前端(位於當前堆棧的頂部),他是可見的由焦點的,可以用來處理用戶操作(點擊,雙擊,長按等),那摩就叫做激活或運行狀態。值得注意的是Activity處於運行狀態的時候,Android會儘可能地保持它的運行,即使出現內存不足等情況下,Android也會先殺死堆棧底部的Activity,來確保運行狀態的Activity正常運行。
暫停狀態:在某種情況下。Activity對用戶來說,仍是可見的,但不用有焦點,
即用戶對他的操作時沒有實際意義的。在這個時候,他是處於暫停狀態,例如:
當最前端的Activity是個透明或者沒有全屏,那摩下層仍然可見的 Activity就是暫停狀態,暫停狀的Activity態仍然是可激活的(他保留着所有的狀態和成員信息並保持與aCtivity管理器的連接),擔當內存不足時可能會被殺死。(注意:不是所有的Activity失去焦點就會進入暫停狀態)
停止狀態:當Activity完全不可見時,他就處於停止狀態他仍然保持者當前狀態和成員信息,然而這些對用戶來說,都是不可見的;同暫停狀態一樣,當系統氣態地方需要內存時,臺也有被殺死的可能。
生命週期事件:
Activity狀態的變化是人爲操作的,而這一狀態的改變,也會觸發一些狀態。我們叫他生命週期狀態事件。一共有七個。
Viid onCreate(Bundle saveInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
生命週期圖:
當打開一個Activity,如果該Activity實例不存在與Activity管理器中,就會觸發onCreate事件。注意:Activity的實例不是我們自己創建的,是Android系統自己創建的。
接下來是onStart事件,然後是onResume事件,此時Activity就處於運行狀態了。
編寫Activity.java
首先重寫7個相應被觸發的方法,以日誌的形式輸出相應的事件信息。
package cn.class3g.activity;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ActivityLifeCycleActivity extends Activity {
private static final String TAG="lifeCycle";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart");
}
}
1:運行Activity從創建到進入運行狀態所觸發的事件;
onCreate()--->onStart()--->onResume()
2:點擊返回鍵
onPause()-->onStop()-->onDestroy()
-----------------------------------------------------------
1運行
2:點擊Home(小房子;壓棧)
onPasuse-->onStop()
3長按Home鍵重新回到ActivityLifeCycleActivity
onRestart()-->onStart()-->onResume()
-------------------------------------------------------------------
1運行
2切換值SecondActivity之上
onPasuse-->onStop()
3切換回ActivityLifeCyle
onRestart()-->onStart()-->onResume()
創建一個對話框樣式的activity:DialogActivity
1運行
2切換至DialogActivity
onPause()
3按返回鍵返回至ActivityLifeCyle
onResume()
創建AlertDialog對話框
顯示對話框並返回,發現此事並不能觸發ActivityLifeCycleActivity實例的狀態變化
也就不會調用其生命週期中的任何的函數。
--------------------------------------------------
添加
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onRestoreInstanceState()");
}
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState()");
}
1運行程序
2按Home
onSaveInstanceState--->onPause()-->onStop()
3在桌面,長按Home重新回到ActivityLifeCycleActivity
onRestsrt-->onstart-->onResume
注意:此時並沒有觸發onRestoreInstanceState()(因爲它並沒有真正銷燬)