您的位置:首页 > 其它

Activity Task

2015-12-25 14:01 225 查看
task是什么?

task只是对activity来说的,其本质就是一组相互关联的Activity的集合,是framework层的一个概念,是用来控制activity的跳转的。

task 是可以跨应用和进程的: 比如我们一个应用的activity可以开启另一个应用的activity,

根据Activity 的启动模式的不同,当activity被开启时,会放存在不同的task 中。

Activity的四中启动模式

Standard,singleTop,SingleTask,SingleInstance.

Standard : 以此种模式开启的Activity,每次都会创建Activity

singleTop:以此种模式开启的Activity,如果task的顶部是此Activity的实例,则回复用此Activity,

 并调用此实例的onNewIntent()方法,如果顶部不是此Activity的实例,则创建实例

singleTop:将此Activity标记为SingleTaskde ,只是将此Activity标记为可以在一个新task中启动此

Activity,至于是否可以启动一个新的Activity,还要收到一个属性的限制,此属性为TaskAffinity.

1.如果没有设置自己的TaskAffinity,则不会创建新的task,而是在应用默认的task。

若task中无对应Activity的实例,则创建一个实例;如果task有无对应Activity的实例,

则会复用,并将此实例上面的Activity都清空。

2.如果设置自己的TaskAffinity,则会创建新的task。先判断是否有这个TaskAffinity

 对应的task,如存在则不创建,若task中无对应Activity的实例,则创建一个实例;

     如果task有对应Activity的实例,则会复用,并将此实例上面的Activity都清空。

     如不存在,则创建一个与TaskAffinity对应的task.并创建对应Activity的实例放入这个task中。

singleInstance:1.以此模式开启的对应Activity的实例Activity,具有全局唯一性,即整个系统会有一个这样的实例。

              2.以此模式开启的对应Activity的实例Activity,会单独占用一个task,被其开启的Activity都不会和他在同一个task中

        3.被以此模式开启的对应Activity的实例开启的Activity,被标记为可以开启Task能力的Activity,但并不一定会开启新task.

的看其是否设置了TaskAffinity。被以此模式开启的对应Activity的实例开启的Activity,framework会为它加上

FLAG_ACTIVITY_NEW_TASK,此时就相当于Activity被标记为singleTask模式一样。

TaskAffinity属性

 The task that the activity has an affinity for. Activities with the same affinity conceptually belong to the same task

(to the same "application" from the user's persp ective). The affinity of a task is determined by the affinity of its root activity.

The affinity determines two things — the task that the activity is re-parented to (see the allowTaskReparenting attribute)

and the task that will house the activity when it is launched with the FLAG_ACTIVITY_NEW_TASK flag.

具有相同的TaskAffinity的activity会公用一个task,一个task的TaskAffinity决定于这个任务的跟activity的TaskAffinity.

这个属性决定两件事情:

1.当activity被 re-parented时,他可以被repatent到哪个task中,

2.当activity以FLAG_ACTIVITY_NEW_TASK标志时,它会被启动到哪个Task中。

默认情况下,一个应用的所有 activity都会具有相同的TaskAffinity,即为当前应用的包名。我们可以通过设置TaskAffinity来给Activity进行分组。

也可一把不同应用中的Activity的TaskAffinity设置成一样的。如果给一个Activity 的TaskAffinity属性设置成一个空串,则表明这个Activity不属

于任何一个task.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: