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


一、Activity的基本概念

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

二、Activity的生命周期

  Activity生命周期是每一個Android開發者都必須掌握的,當我們深入理解活動的生命周期之后,就可以寫出更加連貫流暢的程序,讓我們的程序擁有更好的用戶體驗

 2.1、Activity的生命周期圖

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

  

2.2、Activity的四種狀態

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

1.運行狀態

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

2.暫停狀態

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

3.停止狀態

   當一個Activity不再處於棧頂位置,並且完全不可見的時候,就進入了停止狀態。

4.銷毀狀態

  當一個Activity從返回棧中移除后就變成了銷毀狀態。

2.3、Android返回棧

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

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

 2.4、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被重新啟動了。

三、體驗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的生命周期的總結內容就寫這么多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM