问题:现在有三个页面 activty A B C ,A 打开B,B打开C 现在按HOME 键,再回到app 希望变成 A-->C-->B ,希望从activity 的启动模式去考虑 ?
现在不模拟Home键,在C的页面中添加一个按钮 去打开B。
验证1:
现在在mainefest 里将B的设计模式改为 singleInstance,
第一步:A打开B,A一个任务栈,B一个任务栈,
第二步:B打开C页面,A,C一个任务栈,B一个任务栈,
第三步:C 页面重新打开B页面 复用了B页面,AC 一个任务栈
B返回,到C 页面,C返回 到A页面了。
验证1的不足之处是 没有确保初始的 A,B, C 在同一个任务栈。
验证2:为了解决验证1的不足,现不在mainfest里设置B的启动模式,在C页面打开B的时候动态设置B的启动方式。在验证1的前两步完成时 ABC在同一个任务栈,
进行第三步时 c打开B,动态设置B的启动模式为 SINGLEINSTaNCE
启动B后 AC在一个任务栈,复用了B到另一个任务栈 也达到了要求 。
验证2 的不足是之后 ACB 不在同一个任务栈中
验证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.
*
*
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);
进行第三步之后,ABC 变成了ACB 且还在同一栈 !!!!!!!
注意:同样还有一个flag ,经验证FLAG_ACTIVITY_BROUGHT_TO_FRONT这个flag并不能达到预期效果,