Android學習總結(一)——Activity的基本概念與Activity的生命週期

1、Activity的基本概念

  Activity是Android的四大組件之一,它是一種能夠包含用戶界面的組件,主要用於和用戶進行交互,好比打電話,照相,發送郵件,或者顯示一個地圖!Activity用於顯示用戶界面,用戶經過Activity交互完成相關操做 , 一個App容許有多個Activity。html

2、Activity的生命週期

  Activity生命週期是每個Android開發者都必須掌握的,當咱們深刻理解活動的生命週期以後,就能夠寫出更加連貫流暢的程序,讓咱們的程序擁有更好的用戶體驗android

 2.一、Activity的生命週期圖

  先上一張從圖吧,圖片看上去一目瞭然。圖片來源(http://www.runoob.com/w3cnote/android-tutorial-activity.html)數據結構

  

2.二、Activity的四種狀態

  每一個Activity在其生命週期中最多可能會有四種狀態。app

1.運行狀態

  當一個Activity位於返回棧(關於返回棧的概念下面再介紹)的棧頂時,這時Activity就處於運行狀態,系統會將處於棧頂的Activity顯示給用戶。ide

2.暫停狀態

  當一個Activity再也不處於棧頂位置,但仍然可見,這時Activity就進入了暫停狀態。初學者可能會有這樣的疑問,既然Activity都已經不在棧頂了,怎麼會還可見呢,這是由於並非每個Activity都會佔滿整個屏幕的,好比對話框形式的Activity只會佔用屏幕中間的部分區域。佈局

3.中止狀態

   當一個Activity再也不處於棧頂位置,而且徹底不可見的時候,就進入了中止狀態。this

4.銷燬狀態

  當一個Activity從返回棧中移除後就變成了銷燬狀態。spa

2.三、Android返回棧

  Android是使用任務(Task)來管理Activity的,一個任務就是一組存放在棧裏的Activity集合,這個棧被稱做返回棧,棧(堆棧)是一種先進後出的數據結構,這裏順便提一下另外一種常見的數據結構:隊列,隊列是一種先進先出的數據結構。日誌

  每當啓動一個新的Activity時,它會被放入返回棧中,並處於棧頂的位置。每當咱們按下Back鍵或調用activity的finish()方法去銷燬一個活動時,處於棧頂的Activity會出棧,這時前一個入棧的Activity就會從新處於棧頂的位置。系統老是會顯示處於棧頂的Activity給用戶。code

 2.四、Activity的生存期

  Activity類中定義了7個回調方法,覆蓋了Activity生命週期的每個環節,下面來一一介紹這7個方法

1.onCreate()

  這個方法在每個Activity類都會有,當咱們新建一個Activity類時,必定會重寫父類的onCreate方法,onCreate方法會在Activity第一次被建立時調用。咱們應該在這個方法中完成Activity的初始化操做,好比說加載佈局,初始化佈局控件,綁定按鈕事件等。

2.onStart()

  這個方法在Activity由不可見變爲可見時調用。

3.onResume()

  這個方法在Activity準備好喝用戶交互的時候調用。此時的Activity必定位於返回棧的棧頂,而且處於運行狀態。

4.onPause()

  這個方法在系統準備去啓動或者恢復另外一個Activity的時候調用。

5.onStop()

  這個方法在Activity徹底不可見的時候調用。它和onPause()方法的主要區別在於,若是啓動的新Activity是一個對話框式的activity,那麼,onPause()方法會獲得執行,而onStop()方法並不會執行。

6.onDestory()

  這個方法在Activity被銷燬以前調用,以後Activity的狀態將變爲銷燬狀態。

7.onRestart()

  這個方法在Activity由中止狀態變爲運行狀態以前調用,也就是Activity被從新啓動了。

3、體驗Activity的生命週期

  前面介紹了關於Activity的點點滴滴,下面咱們來親自實戰一下,新建一個LifecycleActivity,用於演示LifecycleActivity的生命週期,代碼以下:

  1 package com.nyl.activitysummary;
  2 
  3 import android.app.Activity;
  4 import android.content.Intent;
  5 import android.os.Bundle;
  6 import android.util.Log;
  7 import android.view.View;
  8 import android.view.Window;
  9 import android.widget.Button;
 10 
 11 /**
 12  * Activity生命週期演示
 13  */
 14 public class LifecycleActivity extends Activity implements View.OnClickListener {
 15 
 16     private static final String TAG = LifecycleActivity.class.getSimpleName();
 17 
 18     private Button btnNormal;
 19     private Button btnDialog;
 20 
 21     /**
 22      * activity第一次建立時被調用
 23      * @param savedInstanceState
 24      */
 25     @Override
 26     protected void onCreate(Bundle savedInstanceState) {
 27         super.onCreate(savedInstanceState);
 28         Log.d(TAG,"onCreate()→android系統調用onCreate方法第一次建立LifecycleActivity,LifecycleActivity此時處於【運行狀態】");
 29         //去掉標題
 30         requestWindowFeature(Window.FEATURE_NO_TITLE);
 31         //加載佈局
 32         setContentView(R.layout.activity_lifecycle);
 33         //初始化控件
 34         initView();
 35     }
 36 
 37     /**
 38      * 初始化視圖
 39      */
 40     private void initView() {
 41         btnNormal = (Button) findViewById(R.id.btnNormal);
 42         btnDialog = (Button) findViewById(R.id.btnDialog);
 43 
 44         btnNormal.setOnClickListener(this);
 45         btnDialog.setOnClickListener(this);
 46     }
 47 
 48     @Override
 49     public void onClick(View view) {
 50         switch (view.getId()){
 51             case R.id.btnNormal:
 52                 Intent intent = new Intent(LifecycleActivity.this,NormalActivity.class);
 53                 startActivity(intent);
 54                 break;
 55             case R.id.btnDialog:
 56                 Intent intent1 = new Intent(LifecycleActivity.this,DialogActivity.class);
 57                 startActivity(intent1);
 58                 break;
 59         }
 60     }
 61 
 62     /**
 63      * activity從後臺從新回到前臺(由不可見變爲可見)時被調用
 64      */
 65     @Override
 66     protected void onStart() {
 67         super.onStart();
 68         Log.d(TAG,"onStart()→LifecycleActivity從後臺從新回到前臺(由不可見變爲可見),android系統調用了onStart方法,LifecycleActivity此時處於【運行狀態】");
 69     }
 70 
 71     /**
 72      * Activity準備好和用戶進行交互的時候被調用
 73      */
 74     @Override
 75     protected void onResume() {
 76         super.onResume();
 77         Log.d(TAG,"onResume()→LifecycleActivity準備好和用戶進行交互的,android系統調用了onResume方法,LifecycleActivity此時處於【運行狀態】");
 78     }
 79 
 80     /**
 81      * Activity準備去啓動或者恢復另外一個Activity的時候調用
 82      */
 83     @Override
 84     protected void onPause() {
 85         super.onPause();
 86         Log.d(TAG,"onPause()→LifecycleActivity準備去啓動另外一個Activity,android系統調用了onPause方法,LifecycleActivity此時處於【暫停狀態】");
 87     }
 88 
 89     /**
 90      * 退出當前Activity或者跳轉到新Activity時被調用
 91      * Activity徹底不可見的時候調用
 92      */
 93     @Override
 94     protected void onStop() {
 95         super.onStop();
 96         Log.d(TAG,"onStop()→LifecycleActivity已經徹底不可見了,android系統調用了onStop方法,LifecycleActivity此時處於【中止狀態】");
 97     }
 98 
 99     /**
100      * 退出當前Activity時被調用,調用以後Activity就結束了
101      */
102     @Override
103     protected void onDestroy() {
104         super.onDestroy();
105         Log.e(TAG,"onDestroy()→LifecycleActivity已經準備被銷燬了,android系統調用了onDestroy方法,LifecycleActivity此時處於【銷燬狀態】");
106     }
107 
108     /**
109      * Activity從後臺從新回到前臺時被調用
110      */
111     @Override
112     protected void onRestart() {
113         super.onRestart();
114         Log.e(TAG,"onRestart()→LifecycleActivity由【中止狀態】變爲【運行狀態】,android系統調用了onRestart方法,LifecycleActivity此時處於【運行狀態】");
115     }
116 }

  爲了演示生命週期,咱們還須要分別再建立兩個子Activity,分別爲NormalActivity和DialogActivity,代碼以下:

 1 package com.nyl.activitysummary;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Window;
 6 
 7 /**
 8  * 正常顯示的Activity
 9  */
10 public class NormalActivity extends Activity {
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         requestWindowFeature(Window.FEATURE_NO_TITLE);
16         setContentView(R.layout.activity_normal);
17     }
18 }
 1 package com.nyl.activitysummary;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Window;
 6 
 7 /**
 8  * 以Dialog的形式展現的Activity
 9  */
10 public class DialogActivity extends Activity {
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         requestWindowFeature(Window.FEATURE_NO_TITLE);
16         setContentView(R.layout.activity_dialog);
17     }
18 }

  在LifecycleActivity的onCreate方法中,分別註冊了兩個按鈕的點擊事件,點擊第一個按鈕會啓動NormalActivity,點擊第二個按鈕會啓動DialogActivity,而後咱們在LifecycleActivity的7個回調方法中經過Log打印一句話,這樣就能夠經過觀察日誌的方式來清楚地看到LifecycleActivity的生命週期

LifecycleActivity的生命週期控制檯打印日誌效果以下:

  關於Activity的基本概念與Activity的生命週期的總結內容就寫這麼多。

相關文章
相關標籤/搜索