你可以通过定义运行模式来定义Activities如何与Task进行交互。定义的两种方式如下:
例子:Activity A 启动 Activity B。如果B在manifest中定义了运行模式,并且A在启动B时,也在Intent中指定了B的运行模式,那么A在Intent的定义将覆盖B在manifest中的定义。
注:有些运行模式在manifest中定义有效未必在Intent中也有效,同样,在Intent定义有效的运行模式在manifest中未必生效。
在这种默认模式下,Activity可以被多次实例化,也可以运行在多个Task中,一个Task可以拥有多个Activity实例。
在这种模式下,如果一个Activity实例已经存在于当前Task的最顶部,那么系统将调用onNewIntent()方法路由到这个实例,而不是创建一个新的Activity实例。
一个Activity可以被实例化多次,且可以从属于不同的Task任务,且一个任务中可以存在多个Activity实例(这情况仅仅存在于Activity实例不在Task任务的顶端)。
A-B-C-D:再开启D,back stack中的情形:
在标准模式下,则为 A-B-C-D-D
在singleTop模式,则为A-B-C-D
如果开启B
则在singleTop模式下为 A-B-C-D-B
这种模式下,系统创建一个新的Task,并在Task的底部实例化Activities。然而,当一个实例存在于一个独立的Task时,系统不是去创建一个新的实例,而是调用onNewIntent()路由到其他任务的实例。在同一时间,只存在一个Activity实例。
于singTask相似,唯独一点不同的是,这个实例只能在一个单独的Task中使用。
在启动Activity时,你可以通过传递一个Intent入参给startActivity()方法,来实现与manifest配置类似功能,改变Activity在task中的行为。