Android四大組件之——Activity的生命週期(圖文詳解)

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運行程序

2Home

onSaveInstanceState--->onPause()-->onStop()

3在桌面,長按Home重新回到ActivityLifeCycleActivity

onRestsrt-->onstart-->onResume

注意:此時並沒有觸發onRestoreInstanceState()(因爲它並沒有真正銷燬)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章