亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何正確理解和使用Activity的4種啟動(dòng)模式

 更新時(shí)間:2017年03月14日 11:32:48   作者:卓行者  
本文主要介紹了如何正確理解和使用Activity的4種啟動(dòng)模式。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧

關(guān)于Activity啟動(dòng)模式的文章已經(jīng)很多,但有的文章寫(xiě)得過(guò)于簡(jiǎn)單,有的則過(guò)于注重細(xì)節(jié),本文想取一個(gè)折中,只關(guān)注最重要和最常用的概念,原理和使用方法,便于讀者正確應(yīng)用。

Activity的啟動(dòng)模式有4種,分別是standard.singleTop. SingleTask. singleInstance,可以在AndroidMainifest.xml文件中指定每一個(gè)Activity的啟動(dòng)模式。一個(gè)Android應(yīng)用一般都會(huì)有多個(gè)Activity,系統(tǒng)會(huì)通過(guò)任務(wù)棧來(lái)管理這些Activity,棧是一種后進(jìn)先出的集合,當(dāng)前的Activity就在棧頂,按返回鍵,棧頂Activity就會(huì)退出。Activity啟動(dòng)模式不同,系統(tǒng)通過(guò)任務(wù)棧管理Activity的方式也會(huì)不同,以下將分別介紹。

1 Standard模式

Standard模式是Android的默認(rèn)啟動(dòng)模式,你不在配置文件中做任何設(shè)置,那么這個(gè)Activity就是standard模式,這種模式下,Activity可以有多個(gè)實(shí)例,每次啟動(dòng)Activity,無(wú)論任務(wù)棧中是否已經(jīng)有這個(gè)Activity的實(shí)例,系統(tǒng)都會(huì)創(chuàng)建一個(gè)新的Activity實(shí)例,以下是實(shí)驗(yàn)驗(yàn)證。

新建一個(gè)FirstActivity,用一個(gè)Button去啟動(dòng)它本身:

發(fā)現(xiàn)每次都會(huì)啟動(dòng)一個(gè)新的FristActivity, Log信息如下

什么時(shí)候用standard模式呢?standartd模式是activity的默認(rèn)模式,大部分情況下,都應(yīng)該使用這種模式,也就是在配置文件中什么都不用做,當(dāng)確實(shí)有特殊需求時(shí),再考慮其他模式。

2 SingleTop模式

SingleTop模式和standard模式非常相似,主要區(qū)別就是當(dāng)一個(gè)singleTop模式的Activity已經(jīng)位于任務(wù)棧的棧頂,再去啟動(dòng)它時(shí),不會(huì)再創(chuàng)建新的實(shí)例,如果不位于棧頂,就會(huì)創(chuàng)建新的實(shí)例,現(xiàn)在把配置文件中FirstActivity的啟動(dòng)模式改為SingleTop,我們的應(yīng)用只有一個(gè)Activity,F(xiàn)irstActivity自然處于任務(wù)棧的棧頂。

當(dāng)應(yīng)用第一次啟動(dòng)后,我們?cè)侔碆utton去啟動(dòng)新的FirstActivity,發(fā)現(xiàn)Log信息中不再打印onCreate函數(shù),說(shuō)明不再創(chuàng)建新的FirstActivity實(shí)例。

這里有一個(gè)新的問(wèn)題,對(duì)于每次啟動(dòng)Activity,我們?cè)撊绾畏謩e處理。答案就是onNewIntent()函數(shù),雖然系統(tǒng)不會(huì)調(diào)用onCreat(),但會(huì)調(diào)用onNewIntent,我們可以在這個(gè)函數(shù)做相應(yīng)的處理。

當(dāng)一個(gè)Activity已經(jīng)在棧頂,但依然有可能啟動(dòng)它,而你又不想產(chǎn)生新的Activity實(shí)例,此時(shí)就可以用singleTop模式。例如,一個(gè)搜索Activity,可以輸入搜索內(nèi)容,也可以產(chǎn)生搜索結(jié)果,此時(shí)就可以用singleTop模式,不會(huì)用戶(hù)每次搜索都會(huì)產(chǎn)生一個(gè)實(shí)例。

3 SingleTask模式

SingleTask模式的Activity在同一個(gè)Task內(nèi)只有一個(gè)實(shí)例,如果Activity已經(jīng)位于棧頂,系統(tǒng)不會(huì)創(chuàng)建新的Activity實(shí)例,和singleTop模式一樣。但Activity已經(jīng)存在但不位于棧頂時(shí),系統(tǒng)就會(huì)把該Activity移到棧頂,并把它上面的activity出棧。修改上面的程序,新建一個(gè)SecondActivity,將FirstActivity設(shè)置為singleTask啟動(dòng)模式,并讓它啟動(dòng)SecondActivity,再讓SecondActivity來(lái)啟動(dòng)FirstActivity。

Log信息如下

當(dāng)SecondActivity啟動(dòng)FirstActivity時(shí),并不會(huì)調(diào)用FirstActivity的onCreate函數(shù),但會(huì)調(diào)用onNewIntent函數(shù),同時(shí)會(huì)調(diào)用SecondActivity的onDestroy函數(shù),SecondActivity實(shí)例被銷(xiāo)毀。

singleTask模式和前面兩種模式的最大區(qū)別就是singleTask模式是任務(wù)內(nèi)單例的,所以我們是否設(shè)定Activity為singleTask模式,就是看我們activity是否需要單例,例如你的某個(gè)Activity

里面有一個(gè)列表,如果有多個(gè)實(shí)例,有可能導(dǎo)致用戶(hù)看到的列表不一致,有的Activity需要經(jīng)常啟動(dòng),如果每次都創(chuàng)建實(shí)例,會(huì)導(dǎo)致占用資源過(guò)多,這些情況都可以使用singleTask模式,但啟動(dòng)singleTask模式的Activity會(huì)導(dǎo)致任務(wù)棧內(nèi)它上面的Activity被銷(xiāo)毀,有可能會(huì)影響用戶(hù)體驗(yàn),使用時(shí)要注意。

4 SingleInstance模式

singleInstance模式也是單例的,但和singleTask不同,singleTask只是任務(wù)棧內(nèi)單例,系統(tǒng)里是可以有多個(gè)singleTask Activity實(shí)例的,而singleInstance Activity在整個(gè)系統(tǒng)里只有一個(gè)實(shí)例,啟動(dòng)一singleInstanceActivity時(shí),系統(tǒng)會(huì)創(chuàng)建一個(gè)新的任務(wù)棧,并且這個(gè)任務(wù)棧只有他一個(gè)Activity。

SingleInstance模式并不常用,如果我們把一個(gè)Activity設(shè)置為singleInstance模式,你會(huì)發(fā)現(xiàn)它啟動(dòng)時(shí)會(huì)慢一些,切換效果不好,影響用戶(hù)體驗(yàn)。它往往用于多個(gè)應(yīng)用之間,例如一個(gè)電視launcher里的Activity,通過(guò)遙控器某個(gè)鍵在任何情況可以啟動(dòng),這個(gè)Activity就可以設(shè)置為singleInstance模式,當(dāng)在某應(yīng)用中按鍵啟動(dòng)這個(gè)Activity,處理完后按返回鍵,就會(huì)回到之前啟動(dòng)它的應(yīng)用,不影響用戶(hù)體驗(yàn)。

以上分析了Activity的4種啟動(dòng)模式,將Activity設(shè)置為哪種啟動(dòng)模式并沒(méi)有標(biāo)準(zhǔn)答案,有時(shí)候,你可能發(fā)現(xiàn)將某個(gè)Activity設(shè)置為一種啟動(dòng)模式或者另一種啟動(dòng)模式,并沒(méi)有明顯區(qū)別,而具體的評(píng)判標(biāo)準(zhǔn)就是看哪種模式更滿(mǎn)足應(yīng)用功能,更有利于用戶(hù)體驗(yàn)。

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

最新評(píng)論