看看你对Activity的启动模式了解多少

看看你对Activity的任务栈了解多少?
我设计了几个关于任务栈的问题,看看你对Android 任务栈的知识了解多少?

Activity A 是 singleTask 模式, Activity B是standard 模式, Activity C是standard 模式

  • 问题1:A,B, C在同一个应用中,都没有设置 taskAffinity
    1 .A 启动 B ,
    2 .B 启动 C , 同时加上Flag FLAG_ACTIVITY_NEW_TASK
    此时任务栈是什么样子?
    只会有一个Task 里面是: C, B, A (from top to bottom)。
    虽然加上了 FLAG_ACTIVITY_NEW_TASK, 但是 B 和 C 属于同一个应用,C会启动到B所在的Task里面。

  • 问题2: A,B, C在同一个应用中,C设置了 taskAffinity
    1 .A 启动 B ,
    2 .B 启动 C , 同时加上Flag FLAG_ACTIVITY_NEW_TASK
    此时任务栈是什么样子?
    会产生两个TASK:
    Task 2: C
    Task 1: B, A (from top to bottom)。
    由于加上了 FLAG_ACTIVITY_NEW_TASK, 会为C单独创建一个Task

  • 问题3: A 和B在同一个应用, C 属于另外一个应用
    A 启动 B,B启动C,同时加上FLAG_ACTIVITY_NEW_TASK
    此时任务栈是什么样子?
    会有两个Task,和问题2的结果一样
    Task2: C
    Task1: B, A (from, top to bottom)
    由于C属于另外一个应用, 会为C单独创建一个 Task.

  • 问题4: 接着问题2, A,B, C在同一个应用中,C设置了 taskAffinity
    1 .A 启动 B ,
    2 .B 启动 C , 同时加上Flag FLAG_ACTIVITY_NEW_TASK
    3 .C 再 启动A
    此时任务栈是什么样子?
    答:会有两个Task
    Task1: A
    Task2: C
    注意 Acitivy B 不见了。 因为 A 是 singleTask 的启动模式,如果A已经存在,再次启动A, 那么A会恢复到前台,并把所在Task上面的Activity都clear掉。

附:查看栈信息的命令。

adb shell dumpsys activity

你可能感兴趣的:(看看你对Activity的启动模式了解多少)