Activity生命周期

onCreate(不可見)
onStart(可見,但不在前臺且不可交互)
onResume(可見,在前臺,可交互)
onPause(可見,但不在前臺,一般是被其他activity覆蓋或索賠)
onStop(可見變?yōu)橥耆豢梢?,但還在內(nèi)存中)
onDestroy(被銷毀)
1.onCreate和onStart之間有什么區(qū)別?
(1)可見與不可見的區(qū)別。前者不可見,后者可見。?(2)執(zhí)行次數(shù)的區(qū)別。onCreate方法只在Activity創(chuàng)建時(shí)執(zhí)行一次,而onStart方法在Activity的切換以及按Home鍵返回桌面再切回應(yīng)用的過程中被多次調(diào)用。因此Bundle數(shù)據(jù)的恢復(fù)在onStart中進(jìn)行比onCreate中執(zhí)行更合適。?(3)onCreate能做的事onStart其實(shí)都能做,但是onstart能做的事onCreate卻未必適合做。如前文所說的,setContentView和資源初始化在兩者都能做,然而想動畫的初始化在onStart中做比較好。
2.onStart方法和onResume方法有什么區(qū)別?
(1)是否在前臺。onStart方法中Activity可見但不在前臺,不可交互,而在onResume中在前臺。?(2)職責(zé)不同,onStart方法中主要還是進(jìn)行初始化工作,而onResume方法,根據(jù)官方的建議,可以做開啟動畫和獨(dú)占設(shè)備的操作。
3.onPause方法和onStop方法有什么區(qū)別?
(1)是否可見。onPause時(shí)Activity可見,onStop時(shí)Activity不可見,但Activity對象還在內(nèi)存中。?(2)在系統(tǒng)內(nèi)存不足的時(shí)候可能不會執(zhí)行onStop方法,因此程序狀態(tài)的保存、獨(dú)占設(shè)備和動畫的關(guān)閉、以及一些數(shù)據(jù)的保存最好在onPause中進(jìn)行,但要注意不能太耗時(shí)。
4.onStop方法和onDestroy方法有什么區(qū)別?
onStop階段Activity還沒有被銷毀,對象還在內(nèi)存中,此時(shí)可以通過切換Activity再次回到該Activity,而onDestroy階段Acivity被銷毀
Activity啟動模式
Activity有四種啟動模式standard、singleTop,singleTask,singleInstance
standard (默認(rèn)模式<Task不唯一>)
系統(tǒng)在啟動 Activity 的任務(wù)中創(chuàng)建 Activity 的新實(shí)例并向其傳送 Intent。Activity 可以多次實(shí)例化,不管這個(gè)實(shí)例是否已經(jīng)存在,而每個(gè)實(shí)例均可屬于不同的任務(wù),并且一個(gè)任務(wù)可以擁有多個(gè)實(shí)例。這種模式的 Activity 被創(chuàng)建時(shí)它的 onCreate、onStart 都會被調(diào)用。這是一種典型的多實(shí)例實(shí)現(xiàn),一個(gè)任務(wù)棧中可以有多個(gè)實(shí)例,每個(gè)實(shí)例也可以屬于不同的任務(wù)棧。在這種模式下,誰啟動了這個(gè) Activity,那么這個(gè) Activity 就運(yùn)行在啟動它的那個(gè) Activity 所在的棧中。
singleTop(棧頂模式<Task不唯一>)
一個(gè)singleTop標(biāo)記的Activity 的實(shí)例可以無限多,唯一的區(qū)別是如果在棧頂已經(jīng)有一個(gè)相同類型的Activity實(shí)例,Intent不會再創(chuàng)建一個(gè)Activity,而是通過onNewIntent()被發(fā)送到現(xiàn)有的Activity。否則創(chuàng)建
singleTask(單實(shí)例<Task唯一>)
只要 Activity 在一個(gè)棧中存在,那么多次啟動此 Activity 都不會重新創(chuàng)建實(shí)例。若A(Activity) 是否在棧中有實(shí)例存在,如果有實(shí)例存在,那么系統(tǒng)就會把 A 調(diào)到棧頂并調(diào)用它的 onNewIntent 方法,如果實(shí)例不存在,就創(chuàng)建 A 的實(shí)例并把 A 壓入棧中 。
singleInstance(Task唯一且只有它一個(gè))
系統(tǒng)不會將任何其他 Activity 啟動到包含實(shí)例的任務(wù)中。該 Activity 始終是其任務(wù)唯一僅有的成員;由此 Activity 啟動的任何 Activity 均在單獨(dú)的任務(wù)中打開。也就是有此種模式的 Activity 只能單獨(dú)地位于一個(gè)任務(wù)棧中。

<Task唯一>