SingleTop啟動(dòng)模式真的可以防止多次打開(kāi)棧頂?shù)腁ctivity么
首先要知道什么是singleTop?
有新的頁(yè)面啟動(dòng)請(qǐng)求時(shí),當(dāng)目標(biāo)Activity處于當(dāng)前棧頂時(shí),會(huì)調(diào)用Activity的onNewIntent()方法,但不創(chuàng)建新實(shí)例。如果棧頂沒(méi)有目標(biāo)Activity則創(chuàng)建。
實(shí)際操作:
? ? 先在AndroidManifest.xml中將目標(biāo)activity中的屬性launchMode設(shè)置成singleTop,然后在activity中設(shè)置onClick事件。

圖1
圖1中點(diǎn)擊事件確實(shí)可以防止手動(dòng)連續(xù)多次點(diǎn)擊,跳轉(zhuǎn)頁(yè)面。
但是,如果在代碼中多次跳轉(zhuǎn)頁(yè)面呢:

圖2
圖2中,如果是程序執(zhí)行的多次跳轉(zhuǎn)同一個(gè)目標(biāo)頁(yè)面,startActivty無(wú)法反映過(guò)來(lái),還沒(méi)來(lái)得及判斷目標(biāo)頁(yè)面是否是singleTop的啟動(dòng)模式,就已經(jīng)跳轉(zhuǎn)過(guò)去了??赡苁谴a比xml屬性更先執(zhí)行(具體情況可以了解下startActivty啟動(dòng)的流程)。所以可以用以下方法來(lái)解決這種問(wèn)題:

圖3
在intent中設(shè)置flag,這樣就保證了,只會(huì)有一個(gè)。