使用 WorkManager 安排工作執行時間Android Jetpack 的一部分。
WorkManager 為持續性作業的推薦解決方案。當透過應用程式和系統重新啟動已排定的作業時,作業仍持續存在。由於大多數的背景處理都是透過持續性作業完成的,因此 WorkManager 是用於背景處理的首推 API。
持續性作業的類型
WorkManager 會處理三種類型的持續性作業:
- 立即執行:工作必須立即開始並盡速完成。可能會加速。
- 長時間執行:長時間執行的工作,執行時間可能會超過 10 分鐘。
- 可延後執行:已排定的週期性工作,於日後啟動,且可定期執行。
圖 1 概略說明不同類型的持續性作業之間的關係。
同樣地,下表概述了各種作業類型。
類型 | 週期 | 存取方式 |
---|---|---|
立即 | 一次性 | OneTimeWorkRequest 和 Worker 。
如要提高工作效率,請在 OneTimeWorkRequest 中呼叫 |
長時間執行 | 一次性或定期 | 任何 WorkRequest 或 Worker 。呼叫工作站中的 setForeground() 以處理通知。 |
可延後 | 一次性或定期 | PeriodicWorkRequest 和 Worker 。 |
如要進一步瞭解如何設定 WorkManager,請參閱「定義您的 WorkRequest」指南。
功能
除了提供更簡便且一致的 API 外,WorkManager 還具備幾項重要優勢:
作業限制條件
使用作業限制條件,藉此定義執行作業的最佳條件。舉例來說,裝置在非計量付費網路、裝置處於閒置狀態或電量充足時,才會執行應用程式。
完善的時間安排
WorkManager 可讓您安排作業,讓您透過彈性的可預約時間範圍執行一次性或重複的作業。您也可以標記作業並為其命名,以便排定不重複的替換作業,並監控或取消一組作業。
排程作業會儲存在內部管理的 SQLite 資料庫中,WorkManager 會確保這項工作持續執行,並在裝置重新啟動時重新安排。
此外,WorkManager 遵循節能功能與最佳做法 (例如 Doze 模式),因此不必擔心這一點。
急件作業
您可以使用 WorkManager 排定立即在背景執行的工作。針對對使用者重視且需在幾分鐘內完成的工作,您應使用「急件作業」。
靈活的重試政策
有時作業失敗。WorkManager 提供靈活的重試政策,包括可設定的指數輪詢政策。
作業鏈
針對複雜的相關作業,請使用直覺式介面將個別作業工作串連在一起,藉此控制哪些元件要依序執行和哪些元件要平行執行。
val continuation = WorkManager.getInstance(context)
.beginUniqueWork(
Constants.IMAGE_MANIPULATION_WORK_NAME,
ExistingWorkPolicy.REPLACE,
OneTimeWorkRequest.from(CleanupWorker::class.java)
).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
.then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
.then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
.then(
if (save) {
workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
} else /* upload */ {
workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
}
)
WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();
您可以針對每項作業工作定義輸入和輸出資料。將作業鏈結在一起時,WorkManager 會自動將一項作業工作中的輸出資料傳遞至下一個作頁工作。
內建執行緒互通性
WorkManager 完美整合協同程式及RxJava,並提供插入自己非同步 API 的靈活性。
使用 WorkManager 執行可靠的作業
WorkManager 重點在協助使用者順暢執行要求的作業,即使使用者離開畫面、應用程式退出或裝置重新啟動也一樣。舉例來說:
- 將記錄檔或數據分析傳送至後端服務。
- 定期將應用程式資料與伺服器同步。
WorkManager 不適用於執行中的背景作業,可在應用程式程序離開時安全地終止。這也不是所有需要立即執行作業的通用解決方案。請參閱背景處理指南,瞭解哪一種解決方案符合您的需求。
與其他 API 的關係
雖然針對特定用途建議使用協同程式解決方案,但我們不建議您將其用於持續性作業。請特別注意,協同程式是並行架構,而 WorkManager 是持續性作業的程式庫。同樣地,AlarmManager 只能用於時鐘或日曆。
API | 推薦學習對象 | 與 WorkManager 的關係 |
---|---|---|
協同程式 | 所有非同步的作業都不需持續維護。 | 協同程式是指在 Kotlin 中離開主執行緒的標準方法。但應用程式關閉後,就會留下記憶體。針對持續性作業,請使用 WorkManager。 |
AlarmManager | 僅限鬧鐘 | 與 WorkManager 不同的是,AlarmManager 會以 Doze 模式喚醒裝置。因此在電源和資源管理方面的效率不高。這項設定只適用於確切的鬧鐘或通知 (例如日曆活動),而非背景作業。 |
更換已淘汰的 API
我們建議所有先前的 Android 背景排程 API (包括 FirebaseJobDispatcher、GcmNetworkManager 和 Job Scheduler) 以 WorkManager API 取代。
開始
請參閱「入門指南」,瞭解如何在應用程式中開始使用 WorkManager。
其他資源
如要進一步瞭解 WorkManager
,請參閱下列資源。
範例
您可以驗證使用者在文字欄位中輸入的內容,例如姓名、電子郵件地址、地址或其他聯絡資訊。這項驗證可減少錯誤,並節省使用者時間。 您可以為部分文字套用樣式,提高可讀性、提升使用者體驗,並透過顏色和字型發揮創意。 您可以在單一文字字串中支援多個連結,為使用者提供前往網頁的選項,進而提升參與度。 如要在應用程式中顯示圖片,以便顯示內容和回應使用者操作,請從磁碟或網路上的外部來源載入圖片。 資訊卡可為 UI 提供 Material Design 容器。 使用 TopAppBar 可組合項,建立頂端應用程式列,協助使用者瀏覽及存取應用程式中的函式。 瞭解如何使用 Compose 動畫 API 為狀態值加上動畫效果、使用轉場效果、為可見度或大小變更加上動畫效果,以及使用交叉淡出效果。 應用程式列是位於畫面頂端或底部的容器,其中包含主要功能和導覽項目。 您可以載入可繪檔案來顯示動畫圖片,在應用程式中打造更具互動性且引人入勝的使用者體驗。動畫圖片可用於建立載入指標、成功或錯誤指標,方便遊戲開發作業,以及執行其他各種 UI 功能。 您可以建立圖示,根據使用者切換按鈕隱藏或顯示密碼,藉此提升安全性並改善使用者體驗。 瞭解如何使用專門用於在畫布上繪製文字的 Compose API。這個片段會顯示用於在圓角矩形中繪製表情符號字型的程式碼。 瞭解如何管理可拆式鍵盤設定變更。 進度指標會顯示作業狀態。 限制小螢幕的應用程式方向,而不限制大螢幕的方向 建立分頁清單,讓使用者可以捲動畫面,存取無法在單一畫面上顯示的內容。水平分頁清單可協助使用者瀏覽圖片、幻燈片或產品輪轉介面等內容。垂直分頁清單適用於內容繁多的應用程式,因為使用者可能需要捲動大量項目 (例如文章)。 您可以為圖片的裁剪區域四周繪製陰影,以便以短片形狀顯示圖片。 本系列影片將介紹各種 Compose API,快速向您展示可用的 API 和使用方式。 為 UI 選擇合適的元件,並瞭解如何在應用程式中導入該元件。 您可以使用切換鈕,讓使用者選擇兩種狀態中的一種。 建立第一個 Jetpack Compose 測試。瞭解如何使用 Compose 的測試成果編寫 UI 測試、使用測試規則、尋找工具和斷言。 方塊元件會以視覺方式呈現複雜的實體,通常會搭配圖示和標籤。 按鈕會觸發特定動作。 懸浮動作按鈕可讓使用者在應用程式中執行主要動作。 在設定變更期間管理 WebView 的狀態。在使用者輸入時驗證輸入內容
設定文字的樣式
支援在單一字串文字中加入多個連結
載入並顯示圖片
建立卡片做為容器
顯示頂端應用程式列
Compose 中的動畫
顯示應用程式列
顯示動畫圖片
根據使用者切換按鈕顯示或隱藏密碼
在 Compose 中繪製文字
管理可拆式鍵盤設定變更
建立進度指標
限制手機螢幕的方向,而不限制大螢幕裝置的方向
顯示分頁清單
顯示剪裁成形狀的圖片
Compose 基本概念
顯示互動式元件
新增使用者可切換的切換鈕
在 Compose 中測試
建立可代表複雜實體的方塊
建立按鈕
建立懸浮動作按鈕 (FAB)
管理 WebView 狀態
影片
- Workmanager - MAD Skills (影片系列)
- 與 WorkManager 合作,2018 年 Android 開發人員高峰會
- WorkManager:超越基礎,2019 年 Android 開發人員高峰會
網誌
目前沒有任何建議。
建議登入 Google 帳戶。