注意:(默认和单例)是指定之后才跳转的,也就是说不管栈里之前什么情况,重要的是看你准备跳转的这个activity是什么模式

如果Activities拥有同样的taskAffinity,则它们是亲密的,它们之间在相互跳转时会位于同一个Task中,并不会产生新的task。反之情况比较复杂。

默认情况下,每个Activity都采用和Application相同的taskAffinity,如果Application没有设置的话,则默认使用包名。

 

1.standard模式

 

下面只有二三对应情况下创建一个新的activity时,生命流程会调用NewIntent方法

android 四种启动模式

2.singletop模式:

android 四种启动模式

 当处于栈顶的时候,就会调用NewIntent;

 android 四种启动模式

 

3.singletask

android 四种启动模式

当activity在栈中存在就会调用NewIntent

在taskAffinity属性不相同时,第一次创建Activity实例时,会启动新的task,并将实例添加到新创建的task中。非第一次启动,将Activity所在task中Activity之上的全部Activity删除,然后跳转到该Activity中。

 android 四种启动模式

 

4.singleinstance模式(指定的这个activity会自己开一个栈):

android 四种启动模式

 

 

Intent的Flag:

FLAG_ACTIVITY_NEW_TASK

在taskAffinity相同时,FLAG_ACTIVITY_NEW_TASK并不起作用,表现和standerd相同。

在taskAffinity不相同时,第一次启动Activity时会创建一个新的task,并将该实例添加到task中,非第一次启动Activity,则不会发生任何事。

FLAG_ACTIVITY_CLEAR_TOP

一般FLAG_ACTIVITY_CLEAR_TASK/FLAG_ACTIVITY_CLEAR_TOP搭配使用。

当taskAffinity相同时:添加FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_CLEAR_TOP没有任何作用。和没有添加时的效果一样。
当taskAffinity不同时:添加FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_CLEAR_TOP后,表现的和singleTask一样。


 

相关文章:

  • 2021-12-14
  • 2022-12-23
  • 2021-07-01
  • 2021-11-19
  • 2021-11-19
  • 2021-08-02
  • 2021-10-13
  • 2021-12-18
猜你喜欢
  • 2021-11-19
  • 2021-11-19
  • 2021-11-02
  • 2021-10-20
  • 2021-11-19
  • 2021-12-02
相关资源
相似解决方案