android程序生命周期
❶ android 生命周期 有什麼用
在 Android 中,多數情況下每個程序都是在各自獨立的 Linux 進程中運行的。當一個程序或其某些部分被請求時,它的進程就「出生」了;當這個程序沒有必要再運行下去且系統需要回收這個進程的內存用於其他程序時,這個 進程就「死亡」了。可以看出,Android 程序的生命周期是由系統控制而非程序自身直接控制。這和我們編寫桌面應用程序時的思維有一些不同,一個桌面應用程序的進程也是在其他進程或用戶請求時被創 建,但是往往是在程序自身收到關閉請求後執行一個特定的動作(比如從 main 函數中 return)而導致進程結束的。要想做好某種類型的程序或者某種平台下的程序的開發,最關鍵的就是要弄清楚這種類型的程序或整個平台下的程序的一般工作 模式並熟記在心。在 Android 中,程序的生命周期控制就是屬於這個范疇——我的個人理解:)
在 Android 系統中,當某個 activity調用 startActivity(myIntent) 時,系統會在所有已經安裝的程序中尋找其 intent filter 和 myIntent 最匹配的一個 activity,啟動這個進程,並把這個 intent 通知給這個 activity。這就是一個程序的「生」。比如我們在 Home application 中選擇 「Web browser」,系統會根據這個 intent 找到並啟動 Web browser 程序,顯示 Web browser 的一個 activity 供我們瀏覽網頁(這個啟動過程有點類似我們在在個人電腦上雙擊桌面上的一個圖標,啟動某個應用程序)。在 Android 中,所有的應用程序「生來就是平等的」,所以不光 Android 的核心程序甚至第三方程序也可以發出一個 intent 來啟動另外一個程序中的一個 activity。Android 的這種設計非常有利於「程序部件」的重用。
一個 Android 程序的進程是何時被系統結束的呢?通俗地說,一個即將被系統關閉的程序是系統在內存不足(low memory)時,根據「重要性層次」選出來的「犧牲品」。一個進程的重要性是根據其中運行的部件和部件的狀態決定的。各種進程按照重要性從高到低排列如 下:
1. 前台進程。這樣的進程擁有一個在屏幕上顯示並和用戶交互的 activity 或者它的一個IntentReciver 正在運行。這樣的程序重要性最高,只有在系統內存非常低,萬不得已時才會被結束。
2. 可見進程。在屏幕上顯示,但是不在前台的程序。比如一個前台進程以對話框的形式顯示在該進程前面。這樣的進程也很重要,它們只有在系統沒有足夠內存運行所有前台進程時,才會被結束。
3. 服務進程。這樣的進程在後台持續運行,比如後台音樂播放、後台數據上傳下載等。這樣的進程對用戶來說一般很有用,所以只有當系統沒有足夠內存來維持所有的前台和可見進程時,才會被結束。
4. 後台進程。這樣的程序擁有一個用戶不可見的 activity。這樣的程序在系統內存不足時,按照 LRU 的順序被結束。
5. 空進程。這樣的進程不包含任何活動的程序部件。系統可能隨時關閉這類進程。
從某種意義上講,垃圾收集機制把程序員從「內存管理噩夢」中解放出來,而 Android 的進程生命周期管理機制把用戶從「任務管理噩夢」中解放出來。我見過一些 Nokia S60 用戶和 Windows Mobile 用戶要麼因為長期不關閉多餘的應用程序而導致系統變慢,要麼因為不時查看應用程序列表而影響使用體驗。Android 使用 Java 作為應用程序 API,並且結合其獨特的生命周期管理機制同時為開發者和使用者提供最大程度的便利。
❷ android為什麼要劃分生命周期
沒有為什麼,你只需要了解它是什麼就可以了。
劃分生命周期是一種軟體系統設計概念。手機不同於電腦,電腦擁有足夠的資源來處理各種業務,同時支持多任務,而手機則不同,它一般是單任務,沒有多少資源處理太多業務,大家必須排隊來處理,另外還有各種不可預期的請求(比如我正在玩QQ游戲,電話來了)。你應該先了解生命周期中的每個狀態位都是在什麼時候出現的,就應該能明白為什麼需要這樣設計。
這個生命周期的介紹在 Android 官方網站 developer.android.com 上有介紹
❸ 如何管理Android中Activity的生命周期
一、基礎
1.1自己創建的activity必須要繼承類Activity(或其子類)。在activity里,為了實現activity各種狀態的切換,你必須實現指定的回調方法。以下是最為重要的兩個回調方法
onCreate():
這是必須實現的回調方法,啟動一個 activity時會首先調用此方法。因此,在onCreate()的方法體里,你應該初始化該activity必要的控制項。值得注意的是,在這里你必須調用setContentView(View view)方法去呈現用戶的界面。
onPause():
在用戶將要離開activity時調用此方法(指的是此時activity處於半透明狀態且沒有獲取用戶的焦點)。通常在這樣的狀態下,你需要處理用戶數據的提交、動畫處理等操作。
1.2銷毀activity
你可以調用finish()方法去銷毀一個activity。同樣得,你可以調用finishActivity()方法去銷毀一個你剛剛啟動的activity。
tips:
在多數情況下,你是不需要顯式地調用finish…()方法去銷毀一個activity。在將要討論到的activity生命周期里,你可以知道,Android系統會為你管理activity的生命周期,所以你並不需要顯式銷毀activity(即調用finish類方法)。顯式地調用finish類方法,會對用戶的體驗產生不利的影響,除非你確實是不希望用戶返回到此activity(界面),才去顯式調用finish類方法。
二、認識activity的生命周期
2、1
Activity的生命周期對它的任務、backstack和與此有關聯的activity有著直接的影響。因此想開發出一個健壯的有彈性的Android程序,你需要學會如何去管理activity的生命周期(即調用各種回調方法)。
activity的生命周期主要包含一些三種狀態:
(1)運行態(Resumedstate)
此時Activity程序顯示在屏幕前台,並且具有焦點,可以與用戶的操作進行交互,如向用戶提供信息、捕獲用戶單擊按鈕的事件並做處理。
(2)暫停態(PausedState)
此時Activity程序失去了焦點,並被其他處於運行態的otherActivity取代在屏幕顯示,但otherActivity程序並沒有覆蓋整個屏幕或者具有半透明的效果—此狀態即為暫停態。處於暫停態的Activity仍然對用戶可見,並且是完全存活的(此時Activity對象存留在內存里,保留著所有狀態與成員信息並保持與窗口管理器的連接)。如果系統處於內存不足的情況下,會殺死這個Activity。
(3)停止態(StoppedState)
當Activity完全被另一個otherActivity覆蓋時(此時otherActivity顯示在屏幕前台),則處於停止態。處於停滯態的Activity依然是存活的(此時Activity對象依然存留在內存里,保留著所有的狀態和與成員信息,但沒有與窗口管理器保持連接),而且它對用戶是不可見的,如果其他地方需要內存,系統會銷毀這個Activity。
處於暫停態(PausedState)或者停止態(Stopped
State)的Activity,系統可以通過調用finish()方法或者直接終止它的進程來銷毀此Activity(從內存中清楚此Activity對象)。被finish()或者銷毀的Activity再重新打開時,是需要再次初始化此Activity的。
2、2
當一個Activity從一種狀態轉到另一種狀態時,會通過調用回調方法來通知這種變化。這些回調方法都是可以重寫的,你可以根據程序的的需要來選擇重寫對應的回調方法。以下列出了Activity生命周期里的基本回調方法:
public class ExampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The activity is being created.
}
@Override
protected void onStart() {
super.onStart();
// The activity is about to become visible.
}
@Override
protected void onResume() {
super.onResume();
// The activity has become visible (it is now
"resumed").
}
@Override
protected void onPause() {
super.onPause();
// Another activity is taking focus (this activity is
about to be "paused").
}
@Override
protected void onStop() {
super.onStop();
// The activity is no longer visible (it is now
"stopped")
}
@Override
protected void onDestroy() {
super.onDestroy();
// The activity is about to be destroyed.
}
}
筆記:在方法體里,必須先調用父類對應的實現方法super.Xxx(),再執行其他的操作(如上面代碼所示)。為了習慣,下面也提供一些代碼來測試一些這些方法的使用,在博客的最後面。
總的來說,這些回調方法定義了Activity整個生命周期。在生命周期里通過重寫這些回調方法,,你可以監控以下下三個嵌套的方法循環。
完整存活的時間:
Activity的完整存活的時間是自第一次調用onCreate()開始,直至調用onDestroy()為止。Activity在onCreate()中設置所有「全局」狀態以完成初始化,而在onDestroy()中釋放所有系統資源。例如,如果Activity有一個線程在後台運行從網路下載數據,它會在onCreate()創建線程,而在 onDestroy()銷毀線程。
可見狀態的時間:
Activity的可見狀態是自onStart()調用開始直到相應的onStop()調用結束。在此期間,用戶可以在屏幕上看到Activity,盡管它也許並不是位於前台或者也不與用戶進行交互。在這兩個方法之間,我們可以保留用來向用戶顯示這個Activity所需的資源。例如,當用戶不再看見我們顯示的內容時,我們可以在onStart()中注冊一個BroadcastReceiver來監控會影響UI的變化,而在onStop()中來注消。onStart() 和 onStop() 方法可以隨著應用程序是否為用戶可見而被多次調用。
顯示在前台的時間:
Activity的前台顯示是自onResume()調用起,至相應的onPause()調用為止。在此期間,Activity位於前台最上面並與用戶進行交互。Activity會經常在暫停和恢復之間進行狀態轉換——例如當設備轉入休眠狀態或者有新的Activity啟動時,將調用onPause() 方法。當Activity獲得結果或者接收到新的Intent時會調用onResume() 方法。
❹ android四大組件哪些有生命周期
Android四大組件分別為activity、service、content provider、broadcast receiver。如果有生命周期的話,那就是這兩個:activity、service
❺ 請問android非法退出後,activity生命周期順序是什麼
1. FC退出,不會去調用activity的onpause onstop ondestory。 我認為,FC退出是系統直接殺死app的process, 這個時候程序直接退出,運行到哪就是哪。
這點,你可以在app里 加個無線循環 debug一次應能看到。
2. 本地service,和app在一個process里,是一起退出。如果是遠程service,應該是在還會運行(這點不做保證)。
3.卸載程序這個,沒有做過測試。 不過我認識也是 殺死process。 所以和上面應該是同樣的。
最後, 我覺得像FC和程序崩潰,卸載之類的, 都應該從 進程的角度考慮,和程序本身關系不大。
就像是 從外部強制把他over, 內部是無法知道的,所以他不會去跑 生命周期了。
❻ 如何管理Android中Activity的生命周期
管理Android中Activity的生命周期
在一個activity的生命周期中,系統會像金字塔模型一樣去調用一系列的生命周期回調函數。Activity生命周期的每一個階段就像金字塔中的台階。當系統創建了一個新的activity實例,每一個回調函數會向上一階移動activity狀態。處在金字塔頂端意味著當前activity處在前台並處於用戶可與其進行交互的狀態。
當用戶退出這個activity時,為了回收該activity,系統會調用其它方法來向下一階移動activity狀態。在某些情況下,activity會隱藏在金字塔下等待(例如當用戶切換到其他app),此時activity可以重新回到頂端(如果用戶回到這個activity)並恢復用戶離開時的狀態。

根據activity的復雜度,也許不需要實現所有的生命周期方法。但了解每一個方法的回調時機並在其中填充相應功能,使得確保app能夠像用戶期望的那樣執行是很有必要的。如何實現一個符合用戶期待的app,我們需要注意下面幾點:
使用app的時候,不會因為有來電通話或者切換到其他app而導致程序crash。
用戶沒有激活某個組件時不會消耗寶貴的系統資源。
離開app並且一段時間後返回,不會丟失用戶的使用進度。
設備發生屏幕旋轉時不會crash或者丟失用戶的使用進度。
只有三個狀態是靜態的,這三個狀態下activity可以存在一段比較長的時間。(其它幾個狀態會很快就切換掉,停留的時間比較短暫)
Resumed:該狀態下,activity處在前台,用戶可以與它進行交互。(通常也被理解為"running" 狀態)
Paused:該狀態下,activity的部分被另外一個activity所遮蓋:另外的activity來到前台,但是半透明的,不會覆蓋整個屏幕。被暫停的activity不再接受用戶的輸入且不再執行任何代碼。
Stopped:該狀態下, activity完全被隱藏,對用戶不可見。可以認為是在後台。當stopped, activity實例與它的所有狀態信息(如成員變數等)都會被保留,但activity不能執行任何代碼。
❼ 請簡述Android的Activity組件的生命周期方法。

在Activity的生命周期中有很多的回調方法,系統調用Activity中的這些回調方法,就像是爬一個階梯。而這些回調方法就相當於階梯的每一層。當系統創建了一個新的Activity實例,回調方法一層一層的從最低層爬到最高層,也就是Resumed()。到位於頂樓的時候,也就是這個Activity就位於用戶的前台。此時用戶就可以和Activity進行互動了。
當用戶要離開Activity的時候,系統調用右邊的回調方法,一層一層的下這個階梯,使Activity的狀態從最高層移動到最底層。在有些情況下,Activity只是完成部分的狀態遷移並且等待用戶的指令。此時Activity只是站在Paused()上或者是Stopped()的階梯上面,當得到用戶重新運行的指令時,Activity會回到左邊的階梯上。重新調用左邊相應的爬階梯回調方法,一步一步向上爬並重新回到最高層的狀態。並顯示在用戶的前台。
根據Activity復雜度的不同,你或許不用實現所有的生命周期方法。可是,理解每個生命周期回調函數的意義卻非常重要,這能確保你的應用能完全按照用戶的期望做出正確的動作。正確的實現生命周期的回調方法,才能應用正確的動作。所以作為一個合格的android程序員,理解Activity的生命周期,是非常有必要的
❽ android碎片的生命周期比活動的生命周期多哪些步驟
按照存在狀態說的話,碎片的生命周期和活動的很類似都具有運行狀態、暫停狀態、停止狀態和銷毀狀態四種。具體按照回調方法分的話,碎片的回調方法比活動的多五種,分別是onAttach()方法(在碎片和活動剛關聯的時候調用)、onCreatView()方法(碎片由不可見變為可見的時候調用,位於onCreate方法之後)、onActivityCreated()方法(碎片創建完畢正式啟用之前要確保與碎片關聯的活動一定已經創建完畢的時候調用,位於onCreateView方法之後,onStart方法之前)、onDestroyView()方法(在碎片由可見變為不可見之後就會調用,位於onStop之後,onDestroy之前),最後還有一個onDetach()方法,用於碎片和活動解除關聯的時候調用,在onDestroy方法之後調用。
❾ 如何理解Android中Activity的三個「生命周期」
下圖是官方文檔里的Activity生命周期圖,其中彩色標出的四個框是Activity的四種狀態,當Activity的狀態改變時會觸發一個或多個onXXX()方法。

onCreate()
當Acitivity第一次被創建時觸發,一般在這里要做的事情包括創建視圖(setContentView())、向視圖填充必要的數據等等。
onRestart()
這個我比較少用到,按文檔上的介紹,如果Activity之前被stop過,那麼下一次onStart()方法之前會先觸發這個方法。
onStart()
只要Activity從不可見變成可見,就會觸發到這個方法,但被AlertDialog遮擋/顯示的情況不算在內。
onResume()
當Activity來到最上層的時候,也就是開始與用戶直接交互時,觸發這個方法。例如本來Activity被一個AlertDialog遮擋,當這個AlertDialog消失時,onResume()方法就被觸發。
onPause()
和onResume()的觸發條件剛好相反,如果Activity本來在最上層,當它要讓出最上層的位置時會觸發這個方法。onPause()和onResume()是被觸發最頻繁的兩個方法,所以在這里不應該執行過於消耗資源的方法。
onStop()
當有其他Activity覆蓋了當前Activity時,不論另一個Activity是新開始的還是從下層移至最上層的,當前Activity的onStop()方法都會被觸發。
onDestroy()
Activity生命周期的終點。有兩種情況會導致它被觸發:1)執行了Activity#finish()方法;2)Android系統由於資源不足等原因決定殺掉Activity所在進程。通過isFinishing()方法可以判斷出是哪種情況。在這個方法里,我們一般要做的事情是釋放Activity佔有的資源,例如後台正在進行的下載線程等等。
最後,舉個實際例子來說明,假設你有一個「首頁Activity」和一個「編輯頁Activity」。
•當用戶點擊首頁里的「開始編輯」按鈕時,首頁的onPause()->onStart()onStop()依次觸發,編輯頁的onCreate()->onStart()->onResume()依次觸發;(感謝James.H.Fu指出的錯誤)
•當用戶在編輯頁按下「返回」按鈕時,編輯頁的onPause()->onStop()依次觸發,之後首頁的onStart() -> onResume()依次觸發;
•這時用戶在首頁按下「返回」按鈕,首頁的onPause()->onStop()->onDestroy()依次觸發。
❿ Android中,activity生命周期是指什麼
一個Android應用程序在運行時,對於底層的Linux Kernel而言都是一個單獨的進程,但是對於Android系統而言,因為局限於手機畫面的大小與使用的考慮,不能把每一個運行中的應用程序窗口都顯示出來。
所以通常手機系統的界面一次僅顯示一個應用程序窗口,Android使用了Activity的概念來表示界面。
運行中的應用程序分為五大類,分別是:
前景模式:foreground process
可見模式:visible process
背景模式:background process
空白模式:empty process
服務模式:service process
除了最後一個,貌似service process是Service的事情了。其他都與Activity相關。
Android系統會判斷應用程序Activity是屬於哪一個類,給予不同的Activity生命周期。
Activity的生命周期也是它所在進程的生命周期。
Activity生命周期的運行如圖:

Activity生命周期的每一個階段都表示為金字塔上的一個台階,當系統創建一個新的activity時,每一個回調函數都把activity的狀態網上挪一步。
金子塔的最頂層就是activity運行在前景模式下,用戶可與之交互。
當用戶離開activity時,系統調用另一些回調函數,將activity的狀態從金字塔中一步一步移下來。有些情況下,activity只移動一部分,並沒有完全到底,這些情況下仍然可以移動回頂部。
注意這些狀態中只有三個狀態是靜態(static)的,意味著activity只有在這三個狀態下能停留一段時間:
Resumed:foreground,用戶可交互running state
Paused:部分被遮擋,不能接收用戶輸入也不能執行代碼,另一個半透明或者小的activity正擋在前面。
Stopped:activity完全被遮擋,不能被用戶看到,activity被認為在background,當Stopped的時候,activity實例的狀態信息被保留,但是不能執行任何代碼。
其他狀態都是轉換狀態,系統會很快調用其他相應的回調函數離開這些狀態。比如系統調用onCreate()之後,會很快調用onStart(),之後是onResume()。
相信不少朋友也已經看了以上的分析之後,也基本了解了Activity生命周期的幾個過程,我們就來說一說這幾個過程。
1.啟動Activity:系統會先調用onCreate方法,然後調用onStart方法,最後調用onResume,Activity進入運行狀態。
2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。
3.當前Activity由被覆蓋狀態回到前台或解鎖屏:系統會調用onResume方法,再次進入運行狀態。
4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居後台:系統會先調用onPause方法,然後調用onStop方法,進入停滯狀態。
5.用戶後退回到此Activity:系統會先調用onRestart方法,然後調用onStart方法,最後調用onResume方法,再次進入運行狀態。
6.當前Activity處於被覆蓋狀態或者後台不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而後用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。
7.用戶退出當前Activity:系統先調用onPause方法,然後調用onStop方法,最後調用onDestory方法,結束當前Activity。
有關於Activity的生命周期是Android中最基礎和最重要的知識,如果你想系統的了解一下Activity的生命周期,推薦你可以去一個叫做秒秒學的教程網站上看看。
