Android activity 启动模式的一次探究

问题:现在有三个页面 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并不能达到预期效果,

你可能感兴趣的:(Android activity 启动模式的一次探究)