Android API Guides 閱讀筆記(7)----Overview Screen

這節的內容應該算是上節(Task and Back Stack)的補充,Overview Screen主要是描述最近任務(task)
用以顯示最近任務的一個功能(Android設備上最右邊的按鈕),在Android5.0之前稱爲recents screen(或者recent task list)可以很方便的讓用戶切換到不同的應用程序,這個功能不多說,只要使用過Android設備,應該都瞭解。通過閱讀這一節的內容,將會瞭解到如何管理Overview Screen,包括,添加Task,移除Task,以及在Overview Screen中保留Task

overview screen的概念

通常是由Android系統定義的,如果開發者想要自定義,管理的方法如下:

  • 通過ActivityManager.AppTask類進行管理

  • 通過啓動一個Activity的Intent中的flag進行配置

  • 通過< activity >節點的屬性進行配置

怎樣添加Task到Overview Screen

如上節內容所訴,主要通過兩種方式

  • 在使用Intent啓動一個Activity時,添加flag:

    • FLAG_ACTIVITY_NEW_DOCUMENT:當創建新的document(文檔上寫的是document而不是Activity,對此不太瞭解,後續補上)時,系統是在邏輯上插入斷點,使新啓動的Activity在Overview Screen中成爲一個新的Task,而事實上並沒不是新建一個Task(注意,在Android5.0之後,此常量值替換了FLAG_ACTIVITY_CLEAN_WHEN_TASK_RESET)

    • FLAG_ACTIVITY_MULTIPLE_TASK:當創建新的document時,系統總是會爲將要啓動的Activity創建一個新的Task,並使其稱爲根Activity,這樣的設置可以讓同一個document在多個Task中打開

  • 在清單文件中對應< activity >節點下添加屬性 android:documentLaunchMode,有以下四個值:

    • intoExisting:重新使用一個存在的Task,類似設置FLAG_ACTIVITY_NEW_DOCUMENT而不設置FALG_ACTIVITY_MULTIPLE_TASK時的作用

    • always:爲將要打開的document創建一個新的Task,即使這個document已經打開過。類似設置FLAG_ACTIVITY_NEW_DOCUMENT同時也設置了FLAG_ACTIVITY_MULTIPLE的作用

    • none:不會爲將要打開的document創建新的Task,這是overview screen處理Task的默認模式,顯示單任務的App

    • never:不會爲將要打開的document創建新的Task,類似設置FLAG_ACTIVITY_NEW_DOCUMENT或者FLAG_ACTIVITY_MULTIPLE_TASK其中一個的作用

    注意,在設置none或者never時,應該確保其Activity設置類launchMode的值爲standard,如果沒有設置這個值,將會使用默認的documentLaunchMode=”none”

怎樣移除一個Task

通常,當一個Task中的所有Activity都finish的時候,這個Task是自動從overview screen中移除的。當然,也可以通過Intent的flag或者清單文件中的< activity >節點進行設置來移除

  • 清單文件設置:

    • android:excludeFromRecents:通過設置該屬性值爲true,可以將一個Task總是排除overview screen,也就是讓該Activity所在的Task不顯示在overview screen中

    • android:maxRecents:設置應用程序在overview screen中能包含的Task的最大數量,默認值爲16,當到達這個數量時,系統將會自動清理掉最近最少使用的Task

  • 使用AppTask類的方法:
    通過AppTask類中的finishAndRemoveTask()方法,在創建Task的Activity中指定什麼時候移除它(在使用這個的時候會忽略掉FLAG_ACTIVITY_RETAIN_IN_RECENT,也就是說,移除的權限比保留更高,當想移除的時候,即使設定了保留的屬性,依然會移除掉)

怎樣保留一個Task

如果想在overview screen中保留一個Task(即使這個Task對應的Activity已經結束了)

  • 在通過Intent啓動這個Activity時,使用flag值爲:FLAG_ACTIVITY_RETAIN_IN_RECENTS

  • 當然,在< activity >節點設置android:autoRemoveFromRecents的值爲false,也能達到同樣的效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章