Android的啟動(dòng)模式有四種,分別為:standard稚矿、singleTop庸诱、singleTask、singleInstance晤揣;這些都可以在AndroidManifest.xml文件中對(duì)應(yīng)的標(biāo)簽設(shè)置android:launchMode桥爽,也可以在class文件中動(dòng)態(tài)的設(shè)置(singleInstance除外)。
開發(fā)者可以根據(jù)實(shí)際需求為Activity設(shè)置對(duì)應(yīng)的啟動(dòng)模式昧识,以避免創(chuàng)建大量重復(fù)的Activity實(shí)例等問題钠四。
下面介紹下各種啟動(dòng)模式的含義:
1.standard:標(biāo)準(zhǔn)模式,它也是系統(tǒng)的默認(rèn)模式跪楞。此模式下的Activity每次啟動(dòng)都會(huì)創(chuàng)建一個(gè)新的Activity實(shí)例缀去,不管這個(gè)Activity是否已經(jīng)存在實(shí)例,被創(chuàng)建的Activity實(shí)例的生命周期為:onCreate->onStart->onResume甸祭。有一點(diǎn)有趣的地方缕碎,如果你用ApplicationContext 區(qū)啟動(dòng)standard模式的Activity的時(shí)候會(huì)報(bào)錯(cuò),后來查了一些資料才知道:因?yàn)榉茿ctivity類型的Context并沒有所謂的任務(wù)棧池户,而standard模式的Activity會(huì)默認(rèn)進(jìn)入啟動(dòng)它的Activity所屬的任務(wù)棧中阎曹。
2.singleTop:在此模式下的Activity如果處于棧頂,且此時(shí)啟動(dòng)該Activity煞檩,并不會(huì)創(chuàng)建新的實(shí)例,onNewIntent方法會(huì)被調(diào)用栅贴。如果啟動(dòng)該Activity時(shí)斟湃,此Activity沒有處于棧頂,此時(shí)則會(huì)為該Activity創(chuàng)建新的實(shí)例檐薯。
3.singleTask:設(shè)置這個(gè)模式的Activity在所屬的任務(wù)棧中只會(huì)存在一個(gè)實(shí)例凝赛,若啟動(dòng)該Activity時(shí)已經(jīng)存在Activity的實(shí)例,且不管當(dāng)前實(shí)例處于棧的任何位置坛缕,都會(huì)把任務(wù)棧中處于該Activity實(shí)例對(duì)象上面的Activity實(shí)例清除掉墓猎,使其本身處于棧頂,此時(shí)的Activity會(huì)調(diào)用onNewIntent方法赚楚。
4.singleInstance:俗話說一山不容二虎毙沾,用來形容這個(gè)模式再恰當(dāng)不過來,設(shè)置為這種模式的Activity只會(huì)單獨(dú)的存在于一個(gè)任務(wù)棧中宠页,無論怎么操作左胞,它都不會(huì)再創(chuàng)建新的實(shí)例(除非這個(gè)任務(wù)棧被系統(tǒng)銷毀了)
第一次寫文章內(nèi)心還是很忐忑的寇仓,有什么寫的不對(duì)的請(qǐng)各位大牛多多指點(diǎn),謝謝?局妗1榉场!