工作快照

工作快照是 Android 8.0 中導入的基礎架構, 近期縮圖已儲存的介面的螢幕截圖 。近期縮圖代表工作在以下時間中的最終狀態: 使用「近期」檢視畫面

活動進入停止狀態時,視窗管理員並不會刪除 只要活動位於工作頂部,該活動就會浮現。如果 系統必須再次顯示這項活動,視窗管理員就能啟動 無需等待活動完成第一個影格繪製 就該讓它使用 Saved Surface

建築

「近期」縮圖和已儲存介面的兩個概念已與「工作」整合 快照在工作於背景執行時,視窗管理員會放置螢幕截圖 轉換為 GraphicBuffer只要頂端應用程式 任務的活動會保留在記憶體中,這個 GraphicBuffer 會保留在 記憶體用量現在,當同一個活動再次出現在前端時,視窗就會 管理器會建立一個起始視窗 (TaskSnapshotSurface),並附加 GraphicBuffer 沒有將任何記憶體複製到啟動作業的緩衝區佇列 視窗。活動繪製第一個影格後,工作快照就會立即顯示 起始視窗將像一般啟動畫面一樣順暢淡出。

相同的 GraphicBuffer 也會透過 Binder 傳送至 SystemUI 在「最近使用」檢視畫面中的工作預覽狀態。因為這只是參考資料 若是緩衝區,透過繫結器傳送,會耗用很少的資源。當 GraphicBuffer 使用 SystemUI 並包裝在硬體點陣圖中,然後 繪製在螢幕上,但不會將任何記憶體上傳至圖形。

優點

這個新架構有三個主要優點:

  • 如果將工作快照做為起始視窗使用,則會有良好的交叉漸變 最佳做法和實際內容之間有差異
  • 在 SystemUI 中繪製工作快照時,無需任何 複製。先前,必須將點陣圖複製到 Ashmem,然後貼到圖形中 記憶體用量這個方法會將快照直接儲存在圖形記憶體中, 需要複製
  • 在「近期」中顯示的狀態,一律與您在 重新開啟應用程式在此處使用相同的緩衝區,還可以節省大量記憶體。 因此,「近期」功能現在可以以完整解析度顯示這些圖片。 為了節省記憶體,之前的取樣率為 64%。

實作

這項功能完全存在於 Android 平台。沒有任何整合 ,且系統不支援自訂功能。不過,裝置製造商可 完全停用工作快照功能。

如要停用這項功能,請修改這個函式:

frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java#215

請注意,如果停用這項功能,「近期」檢視畫面就不會顯示 都有可能的縮圖

高解析度與低解析度快照

工作快照會以兩種規模寫入磁碟。還原工作時 系統會先讀取磁碟的快照、低解析度快照 他們的高階裝置這項最佳化作業可以縮短圖片載入時間。 否則,從值區讀取快照檔案時 在映像檔可用前,使用者會看到空白的工作資訊卡。 您可以在裝置疊加設定檔中設定縮放比例 設定overlay/frameworks/base/core/res/res/values/config.xmlconfig_highResTaskSnapshotScale」和 config_lowResTaskSnapshotScale。預設值為 1.0 和 0.5。透過設定停用低解析度快照 config_lowResTaskSnapshotScale 至 0.0。

範例和來源

在 TaskSnapshot* 檔案中,尋找此功能的其餘程式碼:

frameworks/base/+/main/services/core/java/com/android/server/wm/