Android-Activity啟動模式

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唯一>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容