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
中还可以包含其他信息,例如在运行工作时应遵循的约束、工作输入、延迟,以及重试工作的退避时间政策。下一部分定义工作请求将更详细地介绍这些选项,以及如何调度唯一工作和重复性工作。
其他资源
除了指南文档之外,还有一些博客、Codelab 和代码示例可帮助您入门。
示例
- Sunflower,一款演示版应用,演示包括 WorkManager 在内的各种架构组件的最佳做法。
Codelab
博客
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-08-27。
[null,null,["最后更新时间 (UTC):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)"]]