Android四種啟動(dòng)模式:standard、singleTop、singleTask、singleInstance 。
standard:默認(rèn)模式,在這個(gè)模式下,每次都會(huì)創(chuàng)建新的Activity實(shí)例,可以有多個(gè)實(shí)例,允許多個(gè)相同實(shí)例疊加。
singleTop:可以有多個(gè)相同Activity實(shí)例,但不允許多個(gè)相同Activity疊加。即,如果activity位于棧頂,啟動(dòng)相同的Activity,不會(huì)創(chuàng)建新的實(shí)例,而會(huì)調(diào)用其onNewIntent方法。
singleTask:相同的Activity只允許有一個(gè)。在這個(gè)模式下,如果棧中存在這個(gè)Activity的實(shí)例就會(huì)復(fù)用這個(gè)Activity,不管它是否位于棧頂,復(fù)用時(shí),會(huì)將它上面的Activity全部出棧,并且會(huì)回調(diào)該實(shí)例的onNewIntent方法。其實(shí)這個(gè)過程還存在一個(gè)任務(wù)棧的匹配,因?yàn)檫@個(gè)模式啟動(dòng)時(shí),會(huì)在自己需要的任務(wù)棧中尋找實(shí)例,這個(gè)任務(wù)棧就是通過taskAffinity屬性指定。如果這個(gè)任務(wù)棧不存在,則會(huì)創(chuàng)建這個(gè)任務(wù)棧。
singleInstance:該模式具備singleTask模式的所有特性外,與它的區(qū)別就是,這種模式下的Activity會(huì)單獨(dú)占用一個(gè)Task棧,具有全局唯一性,即整個(gè)系統(tǒng)中就這么一個(gè)實(shí)例,由于棧內(nèi)復(fù)用的特性,后續(xù)的請(qǐng)求均不會(huì)創(chuàng)建新的Activity實(shí)例,除非這個(gè)特殊的任務(wù)棧被銷毀了。以singleInstance模式啟動(dòng)的Activity在整個(gè)系統(tǒng)中是單例的,如果在啟動(dòng)這樣的Activiyt時(shí),已經(jīng)存在了一個(gè)實(shí)例,那么會(huì)把它所在的任務(wù)調(diào)度到前臺(tái),重用這個(gè)實(shí)例。