Android Activity生命周期詳解
Activity 的生命周期。
一、理解Activity
Activity是Android程序的4大組件之一。
Activity是Android程序的表示層。程序的每一個顯示屏幕就是一個Activity。
學過WEB開發(fā)的同學,可以把Activity理解成網(wǎng)頁中的一個JSP文件;或者你可以把它理解成一個Windows的窗口。
下面看一下Activity類的繼承關系:

從這里可以看到Activity是Context類的子類,大家對此先有個印象。
二、理解Activity的生命周期
手機最重要也是最基礎的功能是打電話,也就意味著電話來的時候可能隨時要把現(xiàn)在的程序暫停,如果電量不足的時候也可能隨時要把現(xiàn)有程序關閉;因此Android程序和電腦上的程序有所不同,具體到Activity,Activity的生命周期不是自身控制的,而是由Android系統(tǒng)控制的。
在android中Activity有四種基本狀態(tài):
1、Running
位于屏幕最前端時,此時處于可見狀態(tài),和用戶可交互的狀態(tài)。
2、Paused
當Acitivy被另一個透明的或者非全屏的Activity覆蓋時的狀態(tài)叫Paused狀態(tài),雖然可見但不可交互。
3、Stop
當Activity被另外一個Activity覆蓋、界面不可見時處于Stop狀態(tài)。
4、Killed
Activity被系統(tǒng)殺死或者跟本沒啟動時就是Killed狀態(tài)。
我們下面看一下Activity的生命周期:

下面是上圖的簡單翻譯版本:

Activity棧:
Android通過Activity棧的方式來管理Activity。

正在運行的Activity 處在在棧的最頂端,它是運行狀態(tài)的;
當有新Activity進入屏幕最上端時,原來的Activity就會被壓入第二層,如果他的屏幕沒有被完全遮蓋,那么他處于Pause狀態(tài),如果他被遮蓋那么他處于Stop狀態(tài)。
當然不管你出于任何一層,都可能在系統(tǒng)覺得資源不足時被強行關閉,當然關閉時在棧底的程序最先被關閉。
譬如:當你在程序中調用 Activity.finish()方法時,結果和用戶按下 BACK 鍵一樣:他告訴 Activity Manager該Activity實例可以被“回收”。隨后 Activity Manager 激活處于棧第二層的 Activity 并重新入棧,把原 Activity 壓入到棧的第二層,從 Running 狀態(tài)轉到 Paused 狀態(tài)。
三.實例:觀察翻轉屏幕導致的Activity狀態(tài)變化
Activity類中定義了和生命周期相關的一些方法,這些方法會在狀態(tài)改變時被調用,譬如創(chuàng)建時調用的方法onCreate()。因此我們可以寫一個程序,在程序的每個一個方法中寫注釋,然后看看運行時注釋的打印順序來跟蹤Activity的狀態(tài)變化。
下面是程序代碼:
package android.basic.lesson4;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;public class MainActivityLife extends Activity {
String tag =”[MainActivityLife]“;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(tag, “onCreate”);
}@Override
public void onStart(){
super.onStart();
Log.i(tag, “onStart”);
}@Override
public void onPause(){
super.onPause();
Log.i(tag, “onPause”);
}@Override
public void onResume(){
super.onResume();
Log.i(tag, “onResume”);
}@Override
public void onStop(){
super.onStop();
Log.i(tag, “onStop”);
}@Override
public void onDestroy(){
super.onDestroy();
Log.i(tag, “onDestroy”);
}
}
然后調出LogCat工具,來觀察程序的運行細節(jié)。通過LogCat的過濾器我們可以看到程序啟動、屏幕翻轉、按后退鍵程序退出的過程,這有助于我們驗證剛才所學的知識。

我們可以看到屏幕翻轉時,Android系統(tǒng)把ActivityLife這個Activity先殺死(具體順序是先暫停、后關閉再銷毀),然后再啟動(具體順序是先創(chuàng)建,后啟動再恢復)。通過這個例子我們也清楚的看到了,是Android系統(tǒng)而不是程序員在控制Activity的生命周期。
以上就是對Android Activity 生命周期的介紹,有需要的朋友可以參考下。
相關文章
Android viewpage實現(xiàn)禁止滑動的功能
這篇文章主要介紹了Android viewpage實現(xiàn)禁止滑動的功能的相關資料,這里附有實現(xiàn)的實例代碼,主要還是重新 ViewPage 這個類,需要的朋友可以參考下2016-11-11
Android Studio屏幕方向以及UI界面狀態(tài)的保存代碼詳解
在本篇文章里小編給各位整理的是關于Android Studio屏幕方向以及UI界面狀態(tài)的保存代碼以及相關知識點,需要的跟著學習下。2019-10-10
RecyclerView嵌套RecyclerView滑動卡頓的解決方法
這篇文章主要為大家詳細介紹了RecyclerView嵌套RecyclerView滑動卡頓的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12
Adnroid 自定義ProgressDialog加載中(加載圈)
這篇文章主要介紹了Adnroid 自定義ProgressDialog加載中(加載圈),需要的朋友可以參考下2017-06-06
Android帶數(shù)字或紅點的底部導航攔和聯(lián)網(wǎng)等待加載動畫示例
這篇文章主要介紹了Android帶數(shù)字或紅點的底部導航攔和聯(lián)網(wǎng)等待加載動畫示例,具有一定的參考價值,有興趣的同學可以了解一下。2017-03-03
Android 進度條按鈕ProgressButton的實現(xiàn)代碼
這篇文章主要介紹了Android 進度條按鈕實現(xiàn)(ProgressButton)代碼,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下2018-10-10

