Android學習整理之Activity生命周期篇

一、Activity生命周期說明

   Activity的四種狀態:

 

  ⒈活動狀態(Active or Running):也稱為運行狀態,處於Activity棧頂,在用戶界面中最上層,完全能被用戶看到,能夠與用戶進行交互;

 

  ⒉ 暫停狀態(Paused):Activity失去焦點,Activity界面被部分遮擋,該Activity不再處於用戶界面的最上層,且不能夠與用戶進行交互。一個暫停狀態的Activity依然保持活力(保持所有的狀態,成員信息,與窗口管理器保持連接),但是在系統內存不夠用的時候將被殺掉;

  ⒊停止狀態(Stopped):Activity在界面上完全不能被用戶看到,也就是說這個Activity被其他Activity全部遮擋,但它依然保持所有狀態和成員信息,隻是它不再可見,它的窗口被隱藏;

  ⒋非活動狀態(Killed):當系統內存需要被用在其他地方的時候,一個停止狀態的Activity被殺掉。

  如果一個Activity是Paused或者Stopped狀態時可以被恢復,也可以被刪除。一個被刪除(殺掉)的Activity如果需要重新恢復就需要重啟。

  當一個activity的當前狀態發生改變時,當前activity就會觸發一系列的回調方法。這些回調方法很明白的闡述瞭activity生命周期的變化過程。

 

  這些方法分別為:onCreat();onstart();onResume;onPause();onStop();onRestart();onDestroy();

 

二、生命周期圖解說明

 

 

這張圖,相信學習過android開發的大牛們都非常的熟悉瞭,但我還是圖解一下:

 

1、當一個activity啟動時,首先會調用onCreat();方法,然後調用onStart();方法,接下來調用onResume();方法。進入activity界面,此時的activity處於Running狀態。

 

2、當一個不是全屏的activity被啟動時(即當前activity被不完全遮住,dialog除外),那麼當前activity首先會執行onPause();方法,當不是全屏的activity被從棧頂移除是,那麼activity會執行onResume();方法。

 

3、當當前activity被新的activity完全覆蓋時,或者按home回到主界面時,當前activity會執行,onPause(),onStop();方法,當回到當前activity時,會執行onRestart();onstart();onResume();方法。

 

4、當用戶退出當前activity時會執行onPause();onStop();最後執行onDestroy();方法。

 

三、程序示例解釋說明

 

 

復制代碼

  1 package org.david.activitylifecycle;

  2 

  3 import android.os.Bundle;

  4 import android.app.Activity;

  5 import android.content.Intent;

  6 import android.util.Log;

  7 import android.view.View;

  8 import android.view.View.OnClickListener;

  9 import android.widget.Button;

 10 

 11 public class MainActivity extends Activity implements OnClickListener {

 12 

 13     private static final String TAG = MainActivity.class.getSimpleName();

 14     private Button btn_next, btn_halfActivity;

 15 

 16     @Override

 17     protected void onCreate(Bundle savedInstanceState) {

 18         super.onCreate(savedInstanceState);

 19         Log.i(TAG, "onCreate()");

 20         setContentView(R.layout.activity_main);

 21 

 22         // init—view

 23         btn_next = (Button) findViewById(R.id.btn_next);

 24         btn_halfActivity = (Button) findViewById(R.id.btn_halfActivity);

 25         btn_next.setOnClickListener(this);

 26         btn_halfActivity.setOnClickListener(this);

 27 

 28     }

 29 

 30     @Override

 31     public void onClick(View v) {

 32         switch (v.getId()) {

 33         case R.id.btn_next:

 34             Intent intent = new Intent(this, SecondActivity.class);

 35             startActivity(intent);

 36             break;

 37         case R.id.btn_halfActivity:

 38             Intent intent2 = new Intent(this,HalfActivity.class);

 39             startActivity(intent2);

 40             break;

 41 

 42         }

 43     }

 44 

 45     @Override

 46     protected void onStart() {

 47         super.onStart();

 48         Log.i(TAG, "onstart()");

 49     }

 50 

 51     @Override

 52     protected void onRestart() {

 53         super.onRestart();

 54         Log.i(TAG, "onRestart()");

 55     }

 56 

 57     @Override

 58     protected void onResume() {

 59         super.onResume();

 60         Log.i(TAG, "onResume()");

 61     }

 62 

 63     @Override

 64     protected void onPause() {

 65         super.onPause();

 66         Log.i(TAG, "onPause()");

 67     }

 68 

 69     @Override

 70     protected void onStop() {

 71         super.onStop();

 72         Log.i(TAG, "onStop()");

 73     }

 74 

 75     @Override

 76     protected void onDestroy() {

 77         super.onDestroy();

 78         Log.i(TAG, "onDestroy()");

 79     }

 80 

 81     @Override

 82     protected void onRestoreInstanceState(Bundle savedInstanceState) {

 83         super.onRestoreInstanceState(savedInstanceState);

 84         Log.i(TAG, "onRestoreInstanceState()");

 85     }

 86 

 87     @Override

 88     protected void onNewIntent(Intent intent) {

 89         super.onNewIntent(intent);

 90         Log.i(TAG, "onNewIntent()");

 91     }

 92 

 93     @Override

 94     protected void onSaveInstanceState(Bundle outState) {

 95         super.onSaveInstanceState(outState);

 96         Log.i(TAG, "onSaveInstanceState()");

 97     }

 98     

 99 

100 }

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *