問題:現(xiàn)在有三個(gè)頁面 activty ?A ?B ?C ?,A 打開B,B打開C ?現(xiàn)在按HOME 鍵疆柔,再回到app 希望變成 A-->C-->B ,希望從activity 的啟動(dòng)模式去考慮 键思?
現(xiàn)在不模擬Home鍵涩哟,在C的頁面中添加一個(gè)按鈕 去打開B伏尼。
驗(yàn)證1:
現(xiàn)在在mainefest 里將B的設(shè)計(jì)模式改為 singleInstance久窟,
第一步:A打開B,A一個(gè)任務(wù)棧币绩,B一個(gè)任務(wù)棧蜡秽,
第二步:B打開C頁面,A缆镣,C一個(gè)任務(wù)棧芽突,B一個(gè)任務(wù)棧,
第三步:C 頁面重新打開B頁面 ? 復(fù)用了B頁面董瞻,AC 一個(gè)任務(wù)棧
B返回寞蚌,到C 頁面田巴,C返回 到A頁面了。
驗(yàn)證1的不足之處是 沒有確保初始的 A挟秤,B, C 在同一個(gè)任務(wù)棧壹哺。
驗(yàn)證2:為了解決驗(yàn)證1的不足,現(xiàn)不在mainfest里設(shè)置B的啟動(dòng)模式艘刚,在C頁面打開B的時(shí)候動(dòng)態(tài)設(shè)置B的啟動(dòng)方式管宵。在驗(yàn)證1的前兩步完成時(shí) ABC在同一個(gè)任務(wù)棧,
進(jìn)行第三步時(shí) c打開B攀甚,動(dòng)態(tài)設(shè)置B的啟動(dòng)模式為 SINGLEINSTaNCE
啟動(dòng)B后 AC在一個(gè)任務(wù)棧箩朴,復(fù)用了B到另一個(gè)任務(wù)棧 也達(dá)到了要求 。
驗(yàn)證2 的不足是之后 ACB 不在同一個(gè)任務(wù)棧中
驗(yàn)證3:
/**
* If set in an Intent passed to {@link Context#startActivity Context.startActivity()},
* this flag will cause the launched activity to be brought to the front of its
* task's history stack if it is already running.
*
* <p>For example, consider a task consisting of four activities: A, B, C, D.
* If D calls startActivity() with an Intent that resolves to the component
* of activity B, then B will be brought to the front of the history stack,
* with this resulting order:? A, C, D, B.
*
* This flag will be ignored if {@link #FLAG_ACTIVITY_CLEAR_TOP} is also
* specified.
*/
intent.setFlags(FLAG_ACTIVITY_REORDER_TO_FRONT);
進(jìn)行第三步之后秋度,ABC 變成了ACB 且還在同一棧 Uㄅ印!<运埂2壕印!J缕凇滥壕!
注意:同樣還有一個(gè)flag ,經(jīng)驗(yàn)證FLAG_ACTIVITY_BROUGHT_TO_FRONT這個(gè)flag并不能達(dá)到預(yù)期效果刑赶,