Android中Activity的四種啟動(dòng)模式

activity的啟動(dòng)模式自然不能脫離Activity的任務(wù)棧(Task),任務(wù)棧(Task)即Application啟動(dòng)時(shí),系統(tǒng)會(huì)為Application創(chuàng)建一個(gè)任務(wù)棧(Task),我們對(duì)Activity的打開和關(guān)閉操作,就是將Activity壓入(push)任務(wù)棧和從任務(wù)棧中彈出(pop)的操作,任務(wù)棧遵循先進(jìn)后出的原則,在棧頂?shù)腁ctivity就是設(shè)備當(dāng)前顯示的Activity。下面切入正題:

1、standard:activity的默認(rèn)啟動(dòng)模式,起允許很多實(shí)例創(chuàng)建。

2、singleTop:相對(duì)于standard而言,當(dāng)有新的請(qǐng)求時(shí),只有在目標(biāo)activity處理?xiàng)m敃r(shí),才會(huì)調(diào)用方法onNewIntent(Intent intent) 而不創(chuàng)建新實(shí)例,其他情況都和standard一致。

場(chǎng)景:APP接收到多條推送消息,點(diǎn)開不同消息,均由同一實(shí)例展示。

3、singleTask:設(shè)置了singleTask啟動(dòng)模式的Activity,它在啟動(dòng)的時(shí)候,會(huì)先在系統(tǒng)中查找屬性值affinity等于它的屬性值taskAffinity的任務(wù)是否存在;如果存在這樣的任務(wù),它就會(huì)在這個(gè)任務(wù)中啟動(dòng),否則就會(huì)在新任務(wù)中啟動(dòng)。因此,如果我們想要設(shè)置了singleTask啟動(dòng)模式的Activity在新的任務(wù)中啟動(dòng),就要為它設(shè)置一個(gè)獨(dú)立的taskAffinity屬性值。如果設(shè)置了singleTask啟動(dòng)模式的Activity不是在新的任務(wù)中啟動(dòng)時(shí),它會(huì)在已有的任務(wù)中查看是否已經(jīng)存在相應(yīng)的Activity實(shí)例,如果存在,就會(huì)把位于這個(gè)Activity實(shí)例上面的Activity全部結(jié)束掉,即最終這個(gè)Activity實(shí)例會(huì)位于任務(wù)的堆棧頂端中。

場(chǎng)景:APP的主頁(yè)

4、singleInstance:和singleTask相比,不同點(diǎn)在于設(shè)置了singleInstance 的 activity所在的Task只會(huì)有這一個(gè)activity。

場(chǎng)景:如APP經(jīng)常調(diào)用的撥打電話、系統(tǒng)通訊錄、地圖類APP 等頁(yè)面,不同APP調(diào)用此類Activity 時(shí),首次創(chuàng)建實(shí)例,之后其他APP只能復(fù)用此實(shí)例。

一般而言,singleTask與singleTop都是為了保證Activity在任務(wù)棧中的唯一性。

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

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