開始使用 WorkManager
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
如要開始使用 WorkManager,請先將程式庫匯入 Android 專案。
在應用程式的 build.gradle
檔案中新增下列依附元件:
Groovy
dependencies {
def work_version = "2.10.3"
// (Java only)
implementation "androidx.work:work-runtime:$work_version"
// Kotlin + coroutines
implementation "androidx.work:work-runtime-ktx:$work_version"
// optional - RxJava2 support
implementation "androidx.work:work-rxjava2:$work_version"
// optional - GCMNetworkManager support
implementation "androidx.work:work-gcm:$work_version"
// optional - Test helpers
androidTestImplementation "androidx.work:work-testing:$work_version"
// optional - Multiprocess support
implementation "androidx.work:work-multiprocess:$work_version"
}
Kotlin
dependencies {
val work_version = "2.10.3"
// (Java only)
implementation("androidx.work:work-runtime:$work_version")
// Kotlin + coroutines
implementation("androidx.work:work-runtime-ktx:$work_version")
// optional - RxJava2 support
implementation("androidx.work:work-rxjava2:$work_version")
// optional - GCMNetworkManager support
implementation("androidx.work:work-gcm:$work_version")
// optional - Test helpers
androidTestImplementation("androidx.work:work-testing:$work_version")
// optional - Multiprocess support
implementation("androidx.work:work-multiprocess:$work_version")
}
新增依附元件並同步處理 Gradle 專案後,下一步為定義要執行的某些作業。
定義作業
請使用 Worker
類別定義作業。doWork()
方法會以非同步方式在 WorkManager 提供的背景執行緒上執行。
如要建立某些 WorkManager 執行的作業,請擴充 Worker
類別並覆寫 doWork()
方法。舉例來說,如要建立 Worker
來上傳圖片,您可以執行下列操作:
Kotlin
class UploadWorker(appContext: Context, workerParams: WorkerParameters):
Worker(appContext, workerParams) {
override fun doWork(): Result {
// Do the work here--in this case, upload the images.
uploadImages()
// Indicate whether the work finished successfully with the Result
return Result.success()
}
}
Java
public class UploadWorker extends Worker {
public UploadWorker(
@NonNull Context context,
@NonNull WorkerParameters params) {
super(context, params);
}
@Override
public Result doWork() {
// Do the work here--in this case, upload the images.
uploadImages();
// Indicate whether the work finished successfully with the Result
return Result.success();
}
}
從 doWork()
回傳的 Result
會通知 WorkManager 服務,說明作業是否成功,以及如果作業失敗,是否應重試作業。
Result.success()
:作業順利完成。
Result.failure()
:作業失敗。
Result.retry()
:作業失敗,並會根據其重試政策在另一時間進行重試。
建立 WorkRequest
定義作業後,必須先透過 WorkManager 服務排定執行作業。WorkManager 為您安排作業進行的方式提供很大的彈性。您可以將其安排為定期執行,也可以將其安排為只執行一次。
無論您選擇如何安排作業,將一律使用 WorkRequest
。雖然 Worker
定義了作業單位,但 WorkRequest
(及其子類別) 則定義了應執行的方式和時間。在最簡單的情況下,您可以使用 OneTimeWorkRequest
,如以下範例所示。
Kotlin
val uploadWorkRequest: WorkRequest =
OneTimeWorkRequestBuilder<UploadWorker>()
.build()
Java
WorkRequest uploadWorkRequest =
new OneTimeWorkRequest.Builder(UploadWorker.class)
.build();
將 WorkRequest 提交至系統
最後,您必須使用 enqueue()
方法將 WorkRequest
提交至 WorkManager
。
Kotlin
WorkManager
.getInstance(myContext)
.enqueue(uploadWorkRequest)
Java
WorkManager
.getInstance(myContext)
.enqueue(uploadWorkRequest);
工作站執行的確切時間取決於 WorkRequest
及系統最佳化作業中使用的限制條件。WorkManager 的設計宗旨,就是要在這些限制下提供最佳行為。
後續步驟
本入門指南僅稍作淺談。WorkRequest
也可加入其他資訊,例如作業執行時的限制條件、作業的輸入內容、延遲和重試作業的輪詢政策。在下一節「定義作業要求」中,您將進一步瞭解這些選項,並瞭解如何安排專屬且重複發生的作業。
其他資源
除了指南文件以外,還有多種網誌、程式碼研究室和程式碼範例可協助您順利上手。
範例
- Sunflower 是一個試用版應用程式,當中展示了各種架構元件 (包括 WorkManager) 的最佳做法。
Codelab
網誌
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-08-27 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-08-27 (世界標準時間)。"],[],[],null,["To get started using WorkManager, first import the library into your Android\nproject.\n\nAdd the following dependencies to your app's `build.gradle` file: \n\nGroovy \n\n```groovy\ndependencies {\n def work_version = \"2.10.3\"\n\n // (Java only)\n implementation \"androidx.work:work-runtime:$work_version\"\n\n // Kotlin + coroutines\n implementation \"androidx.work:work-runtime-ktx:$work_version\"\n\n // optional - RxJava2 support\n implementation \"androidx.work:work-rxjava2:$work_version\"\n\n // optional - GCMNetworkManager support\n implementation \"androidx.work:work-gcm:$work_version\"\n\n // optional - Test helpers\n androidTestImplementation \"androidx.work:work-testing:$work_version\"\n\n // optional - Multiprocess support\n implementation \"androidx.work:work-multiprocess:$work_version\"\n}\n```\n\nKotlin \n\n```kotlin\ndependencies {\n val work_version = \"2.10.3\"\n\n // (Java only)\n implementation(\"androidx.work:work-runtime:$work_version\")\n\n // Kotlin + coroutines\n implementation(\"androidx.work:work-runtime-ktx:$work_version\")\n\n // optional - RxJava2 support\n implementation(\"androidx.work:work-rxjava2:$work_version\")\n\n // optional - GCMNetworkManager support\n implementation(\"androidx.work:work-gcm:$work_version\")\n\n // optional - Test helpers\n androidTestImplementation(\"androidx.work:work-testing:$work_version\")\n\n // optional - Multiprocess support\n implementation(\"androidx.work:work-multiprocess:$work_version\")\n}\n```\n\nOnce you've added the dependencies and synchronized your Gradle project, the\nnext step is to define some work to run.\n| **Note:** You can always find the latest version of WorkManager, including beta, alpha, and release candidate versions on the [WorkManager releases\n| page](/jetpack/androidx/releases/work).\n\nDefine the work\n\nWork is defined using the [Worker](/reference/androidx/work/Worker)\nclass. The `doWork()` method runs asynchronously on a background\nthread provided by WorkManager.\n\nTo create some work for WorkManager to run, extend the `Worker` class and\noverride the `doWork()` method. For example, to create a `Worker` that uploads\nimages, you can do the following: \n\nKotlin \n\n```kotlin\nclass UploadWorker(appContext: Context, workerParams: WorkerParameters):\n Worker(appContext, workerParams) {\n override fun doWork(): Result {\n\n // Do the work here--in this case, upload the images.\n uploadImages()\n\n // Indicate whether the work finished successfully with the Result\n return Result.success()\n }\n}\n```\n\nJava \n\n```java\npublic class UploadWorker extends Worker {\n public UploadWorker(\n @NonNull Context context,\n @NonNull WorkerParameters params) {\n super(context, params);\n }\n\n @Override\n public Result doWork() {\n\n // Do the work here--in this case, upload the images.\n uploadImages();\n\n // Indicate whether the work finished successfully with the Result\n return Result.success();\n }\n}\n```\n\nThe [Result](/reference/androidx/work/ListenableWorker.Result)\nreturned from `doWork()` informs the WorkManager service whether the\nwork succeeded and, in the case of failure, whether or not the work should be\nretried.\n\n- `Result.success()`: The work finished successfully.\n- `Result.failure()`: The work failed.\n- `Result.retry()`: The work failed and should be tried at another time according to its [retry policy](/topic/libraries/architecture/workmanager/how-to/define-work#retries_backoff).\n\nCreate a WorkRequest\n\nOnce your work is defined, it must be scheduled with the WorkManager service in\norder to run. WorkManager offers a lot of flexibility in how you schedule your\nwork. You can schedule it to [run\nperiodically](/topic/libraries/architecture/workmanager/how-to/define-work#schedule_periodic_work)\nover an interval of time, or you can schedule it to run only [one\ntime](/topic/libraries/architecture/workmanager/how-to/define-work#constraints).\n\nHowever you choose to schedule the work, you will always use a\n[WorkRequest](/reference/androidx/work/WorkRequest). While a\n`Worker` defines the unit of work, a\n[WorkRequest](/reference/androidx/work/WorkRequest) (and its\nsubclasses) define how and when it should be run. In the simplest case, you can\nuse a\n[OneTimeWorkRequest](/reference/androidx/work/OneTimeWorkRequest),\nas shown in the following example. \n\nKotlin \n\n```kotlin\nval uploadWorkRequest: WorkRequest =\n OneTimeWorkRequestBuilder\u003cUploadWorker\u003e()\n .build()\n```\n\nJava \n\n```java\nWorkRequest uploadWorkRequest =\n new OneTimeWorkRequest.Builder(UploadWorker.class)\n .build();\n```\n\nSubmit the WorkRequest to the system\n\nFinally, you need to submit your `WorkRequest` to `WorkManager` using the\n[enqueue()](/reference/androidx/work/WorkManager#enqueue(androidx.work.WorkRequest))\nmethod. \n\nKotlin \n\n```kotlin\nWorkManager\n .getInstance(myContext)\n .enqueue(uploadWorkRequest)\n```\n\nJava \n\n```java\nWorkManager\n .getInstance(myContext)\n .enqueue(uploadWorkRequest);\n```\n\nThe exact time that the worker is going to be executed depends on the\nconstraints that are used in your `WorkRequest` and on system optimizations.\nWorkManager is designed to give the best behavior under these restrictions.\n\nNext steps\n\nThis getting started guide only scratches the surface. The `WorkRequest` can\nalso include additional information, such as the constraints under which the\nwork should run, input to the work, a delay, and backoff policy for retrying\nwork. In the next section, [Define your work\nrequests](/topic/libraries/architecture/workmanager/how-to/define-work), you'll\nlearn more about these options in greater detail as well as get an understanding\nof how to schedule unique and reoccurring work.\n\nAdditional resources\n\nIn addition to guide documentation, there are several blogs, codelabs, and code\nsamples available to help you get started.\n\nSamples\n\n- [Sunflower](https://github.com/android/sunflower), a demo app demonstrating best practices with various architecture components, including WorkManager.\n\nCodelabs\n\n- Working with WorkManager [(Kotlin)](https://codelabs.developers.google.com/codelabs/android-workmanager/#0) and [(Java)](https://codelabs.developers.google.com/codelabs/android-workmanager-java/#0)\n- [Advanced WorkManager (Kotlin)](https://codelabs.developers.google.com/codelabs/android-adv-workmanager/#0)\n\nBlogs\n\n- [Introducing WorkManager](https://medium.com/androiddevelopers/introducing-workmanager-2083bcfc4712)\n- [WorkManager Basics](https://medium.com/androiddevelopers/workmanager-basics-beba51e94048)\n- [WorkManager and Kotlin](https://medium.com/androiddevelopers/workmanager-meets-kotlin-b9ad02f7405e)\n- [WorkManager Periodicity](https://medium.com/androiddevelopers/workmanager-periodicity-ff35185ff006)\n- [Customizing WorkManager - Fundamentals](https://medium.com/androiddevelopers/customizing-workmanager-fundamentals-fdaa17c46dd2)\n- [Customize WorkManager with Dagger](https://medium.com/androiddevelopers/customizing-workmanager-with-dagger-1029688c0978)"]]