Activity是Android的四大組件之一,它是一種能夠包含用戶界面的組件,主要用於和用戶進行交互,好比打電話,照相,發送郵件,或者顯示一個地圖!Activity用於顯示用戶界面,用戶經過Activity交互完成相關操做 , 一個App容許有多個Activity。html
Activity生命週期是每個Android開發者都必須掌握的,當咱們深刻理解活動的生命週期以後,就能夠寫出更加連貫流暢的程序,讓咱們的程序擁有更好的用戶體驗android
先上一張從圖吧,圖片看上去一目瞭然。圖片來源(http://www.runoob.com/w3cnote/android-tutorial-activity.html)數據結構
每一個Activity在其生命週期中最多可能會有四種狀態。app
當一個Activity位於返回棧(關於返回棧的概念下面再介紹)的棧頂時,這時Activity就處於運行狀態,系統會將處於棧頂的Activity顯示給用戶。ide
當一個Activity再也不處於棧頂位置,但仍然可見,這時Activity就進入了暫停狀態。初學者可能會有這樣的疑問,既然Activity都已經不在棧頂了,怎麼會還可見呢,這是由於並非每個Activity都會佔滿整個屏幕的,好比對話框形式的Activity只會佔用屏幕中間的部分區域。佈局
當一個Activity再也不處於棧頂位置,而且徹底不可見的時候,就進入了中止狀態。this
當一個Activity從返回棧中移除後就變成了銷燬狀態。spa
Android是使用任務(Task)來管理Activity的,一個任務就是一組存放在棧裏的Activity集合,這個棧被稱做返回棧,棧(堆棧)是一種先進後出的數據結構,這裏順便提一下另外一種常見的數據結構:隊列,隊列是一種先進先出的數據結構。日誌
每當啓動一個新的Activity時,它會被放入返回棧中,並處於棧頂的位置。每當咱們按下Back鍵或調用activity的finish()方法去銷燬一個活動時,處於棧頂的Activity會出棧,這時前一個入棧的Activity就會從新處於棧頂的位置。系統老是會顯示處於棧頂的Activity給用戶。code
Activity類中定義了7個回調方法,覆蓋了Activity生命週期的每個環節,下面來一一介紹這7個方法
這個方法在每個Activity類都會有,當咱們新建一個Activity類時,必定會重寫父類的onCreate方法,onCreate方法會在Activity第一次被建立時調用。咱們應該在這個方法中完成Activity的初始化操做,好比說加載佈局,初始化佈局控件,綁定按鈕事件等。
這個方法在Activity由不可見變爲可見時調用。
這個方法在Activity準備好喝用戶交互的時候調用。此時的Activity必定位於返回棧的棧頂,而且處於運行狀態。
這個方法在系統準備去啓動或者恢復另外一個Activity的時候調用。
這個方法在Activity徹底不可見的時候調用。它和onPause()方法的主要區別在於,若是啓動的新Activity是一個對話框式的activity,那麼,onPause()方法會獲得執行,而onStop()方法並不會執行。
這個方法在Activity被銷燬以前調用,以後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的生命週期的總結內容就寫這麼多。