看看你對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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容