如何查看安卓app界面的activity Activity的啟動(dòng)模式是怎樣的?
Activity的啟動(dòng)模式是怎樣的?你好,安卓從業(yè)者來(lái)回答這個(gè)問(wèn)題。首先,讓我們 讓我們談?wù)劄槭裁碅ctivity需要啟動(dòng)模式。我們知道,默認(rèn)情況下,當(dāng)我們多次啟動(dòng)同一個(gè)活動(dòng)時(shí),系統(tǒng)會(huì)創(chuàng)建多個(gè)實(shí)例,并
Activity的啟動(dòng)模式是怎樣的?
你好,安卓從業(yè)者來(lái)回答這個(gè)問(wèn)題。首先,讓我們 讓我們談?wù)劄槭裁碅ctivity需要啟動(dòng)模式。我們知道,默認(rèn)情況下,當(dāng)我們多次啟動(dòng)同一個(gè)活動(dòng)時(shí),系統(tǒng)會(huì)創(chuàng)建多個(gè)實(shí)例,并將它們逐個(gè)放入任務(wù)堆棧。當(dāng)我們點(diǎn)擊后退按鈕的時(shí)候,會(huì)發(fā)現(xiàn)這些活動(dòng)會(huì)一個(gè)一個(gè)的后退。任務(wù)堆棧是先進(jìn)先出的堆棧結(jié)構(gòu)。這個(gè)很好理解。每按一次back鍵,就有一個(gè)活動(dòng)退出堆棧,直到堆棧為空。當(dāng)堆棧為空時(shí),系統(tǒng)將回收任務(wù)堆棧。關(guān)于任務(wù)棧的系統(tǒng)工作原理,我們暫且不說(shuō),后續(xù)章節(jié)也會(huì)介紹任務(wù)棧。知道了活動(dòng)的啟動(dòng),就可以發(fā)現(xiàn)一個(gè)問(wèn)題:多次啟動(dòng)同一個(gè)活動(dòng)會(huì)創(chuàng)建多個(gè)實(shí)例。Isn 這不好笑嗎?活動(dòng)可以 t設(shè)計(jì)的時(shí)候沒(méi)有考慮這個(gè)問(wèn)題,所以提供了啟動(dòng)模式來(lái)修改系統(tǒng)的默認(rèn)行為。目前有四種啟動(dòng)模式。
標(biāo)準(zhǔn)
單身公寓
單一任務(wù)
單一實(shí)例
standard:
標(biāo)準(zhǔn)模式,這也是系統(tǒng)的默認(rèn)模式。每次啟動(dòng)活動(dòng)時(shí),都會(huì)重新創(chuàng)建一個(gè)實(shí)例。無(wú)論這個(gè)實(shí)例是否已經(jīng)存在,創(chuàng)建的實(shí)例的生命周期都符合典型情況下活動(dòng)的生命周期,如上所述:onCreate(),onStart()onResume()都會(huì)被調(diào)用,這是典型的多實(shí)例實(shí)現(xiàn)。一個(gè)任務(wù)堆??梢杂卸鄠€(gè)實(shí)例,每個(gè)實(shí)例可以屬于不同的任務(wù)堆棧。在這種模式下,無(wú)論誰(shuí)啟動(dòng)這個(gè)活動(dòng),都將在啟動(dòng)它的活動(dòng)所在的堆棧中運(yùn)行。比如活動(dòng)A啟動(dòng)活動(dòng)B(B是標(biāo)準(zhǔn)模式),那么B會(huì)進(jìn)入A所在的棧。不知道讀者有沒(méi)有注意到,當(dāng)我們用ApplicationCont:從活動(dòng)上下文外部調(diào)用startActivity需要FLAG_ACTIVITY_TASK標(biāo)志。這真的是你想要的嗎?一個(gè)
相信大家對(duì)這句話(huà)都會(huì)比較熟悉,因?yàn)槲覀儤?biāo)準(zhǔn)模式的Activity會(huì)默認(rèn)進(jìn)入啟動(dòng)它的Activity所屬的任務(wù)。棧,但是對(duì)于非活動(dòng)類(lèi)型的上下文(比如ApplicationContext)沒(méi)有所謂的任務(wù)棧,所以就有問(wèn)題了。為了解決這個(gè)問(wèn)題,要啟動(dòng)的活動(dòng)指定了FLAG_ACTIVITY_TASK標(biāo)志位,這樣在啟動(dòng)時(shí)就會(huì)為他創(chuàng)建一個(gè)新的任務(wù)棧。此時(shí),要啟動(dòng)的活動(dòng)實(shí)際上是在singl:
棧頂重用模式。在這種模式下,如果一個(gè)新的Activity已經(jīng)在任務(wù)堆棧的頂部,它將不會(huì)被重新創(chuàng)建,同時(shí),它的onNewIntent方法將被調(diào)用。通過(guò)這個(gè)方法的參數(shù),我們可以檢索當(dāng)前請(qǐng)求的信息。需要注意的是,這個(gè)活動(dòng)的onCreate,onStart不會(huì)被系統(tǒng)調(diào)用。因?yàn)樗麤](méi)有。;如果新活動(dòng)已經(jīng)存在但不在棧頂,那么新活動(dòng)將被重新創(chuàng)建。例如,假設(shè)當(dāng)前棧中的情況是ABCD,其中ABCD是四個(gè)活動(dòng),A在棧底,D在棧頂。此時(shí),假設(shè)D將重新啟動(dòng)。如果D的啟動(dòng)模式是singleTop,站棧里的情況還是ABCD。如果D的啟動(dòng)模式是標(biāo)準(zhǔn)的,那么D將被重新創(chuàng)建。
singTask:
堆棧重用模式,這是一種單實(shí)例模式。在這種模式下,只要活動(dòng)存在于堆棧中,當(dāng)活動(dòng)多次啟動(dòng)時(shí),就不會(huì)創(chuàng)建實(shí)例。和singTop一樣,系統(tǒng)也會(huì)回調(diào)它的onNewIntent方法。具體來(lái)說(shuō),當(dāng)一個(gè)具有singleTask模式的活動(dòng)請(qǐng)求開(kāi)始時(shí),比如活動(dòng)A,系統(tǒng)將首先尋找A想要的任務(wù)棧的存在。如果它不 t存在,紅心會(huì)創(chuàng)建一個(gè)任務(wù)棧,然后創(chuàng)建A的一個(gè)實(shí)例,把A放入棧中。如果有A需要的棧,就看A在棧里有沒(méi)有實(shí)例了。如果有實(shí)例,系統(tǒng)會(huì)將轉(zhuǎn)移到堆棧頂部,并調(diào)用其onNewIntent方法。如果沒(méi)有實(shí)例,它會(huì)創(chuàng)建一個(gè)A的實(shí)例并將A放入堆棧,并給出幾個(gè)例子。
例如,任務(wù)堆棧S1的當(dāng)前情況是ABC。此時(shí),活動(dòng)D請(qǐng)求以單任務(wù)模式開(kāi)始,所需的任務(wù)堆棧是S2。由于沒(méi)有S2和D的實(shí)例,系統(tǒng)將首先創(chuàng)建任務(wù)堆棧S2,然后創(chuàng)建D的一個(gè)實(shí)例將其堆棧在S2。另一種情況,假設(shè)D的所需任務(wù)棧是S1,其他情況同上,系統(tǒng)會(huì)直接創(chuàng)建D的一個(gè)實(shí)例,引入S1,因?yàn)镾1已經(jīng)存在。如果D需要的任務(wù)棧是S1,當(dāng)前的任務(wù)棧S1是ABCD,根據(jù)棧內(nèi)重用的原則,此時(shí)不會(huì)重新創(chuàng)建D,系統(tǒng)會(huì)將D切換到棧頂,調(diào)用其oNnNewIntent方法。同時(shí)由于默認(rèn)clearTop的效果,棧中D上的所有活動(dòng)都會(huì)被彈出,所以S1最后的情況是AD,比較特殊,這個(gè)情況后面會(huì)詳細(xì)分析。
singleInstanc:
單實(shí)例模式,這是一種增強(qiáng)的單任務(wù)模式。除了singleTask的所有屬性之外,它還強(qiáng)化了一點(diǎn),即具有這種模式的活動(dòng)只能在單個(gè)任務(wù)堆棧中,換句話(huà)說(shuō),例如,活動(dòng)A是單實(shí)例模式。啟動(dòng)時(shí),系統(tǒng)將創(chuàng)建一個(gè)新的任務(wù)堆棧用于創(chuàng)建。那么A在這個(gè)任務(wù)棧中是獨(dú)立的。由于堆棧中的重用,后續(xù)請(qǐng)求不會(huì)創(chuàng)建新的活動(dòng),除非這個(gè)唯一的任務(wù)堆棧被系統(tǒng)銷(xiāo)毀。
上面介紹了幾種啟動(dòng),這里需要指出一種情況。讓 假設(shè)目前有兩個(gè)任務(wù)堆棧。前臺(tái)任務(wù)棧是AB,后臺(tái)任務(wù)棧是CD。讓 s假設(shè)CD的啟動(dòng)模式是singleTask,現(xiàn)在請(qǐng)求啟動(dòng)D,那么整個(gè)后臺(tái)任務(wù)站都會(huì)切換到前臺(tái)。這時(shí)候整個(gè)背單就會(huì)變成ABCD。當(dāng)用戶(hù)按下返回鍵時(shí),列表中的活動(dòng)會(huì)被逐一彈出,如圖所示。
如果你請(qǐng)求的是C而不是D,情況就不一樣了,如圖。
如何設(shè)置啟動(dòng)模式?
可以通過(guò)清單文件進(jìn)行設(shè)置。
或者用代碼設(shè)置。
意向意向新意向()(這個(gè),)(意向。flag _ activity _ n
安卓startActivityForResult怎么用?
1.調(diào)用這個(gè)方法可以從a跳到b,然后b調(diào)用finsh()后,會(huì)跳回a,在這個(gè)過(guò)程中可以傳輸數(shù)據(jù)。
2.在這整個(gè)過(guò)程中,需要三種方法,即:
startActivityForResult(Intent Intent,int resquestCode)
調(diào)用跳轉(zhuǎn)到a中的b。
setResult(int resultCode,Intent data)
設(shè)置要傳輸?shù)臄?shù)據(jù)。然后調(diào)用finish()返回b。
onActivityForResult(int requestCode,int resultCode,Intent data)
調(diào)用進(jìn)行數(shù)據(jù)處理。
3.其實(shí)百度一鍵就能找到。