هنگامی که وابستگی ها را اضافه کردید و پروژه Gradle خود را همگام سازی کردید، گام بعدی این است که مقداری کار برای اجرا تعریف کنید.
کار را تعریف کنید
کار با استفاده از کلاس Worker تعریف می شود. متد doWork() به صورت ناهمزمان بر روی یک رشته پس زمینه ارائه شده توسط WorkManager اجرا می شود.
برای ایجاد مقداری کار برای WorkManager برای اجرا، کلاس Worker را گسترش دهید و متد doWork() را لغو کنید. به عنوان مثال، برای ایجاد یک Worker که تصاویر را آپلود می کند، می توانید موارد زیر را انجام دهید:
کاتلین
classUploadWorker(appContext:Context,workerParams:WorkerParameters):Worker(appContext,workerParams){overridefundoWork():Result{// Do the work here--in this case, upload the images.uploadImages()// Indicate whether the work finished successfully with the ResultreturnResult.success()}}
جاوا
publicclassUploadWorkerextendsWorker{publicUploadWorker(@NonNullContextcontext,@NonNullWorkerParametersparams){super(context,params);}@OverridepublicResultdoWork(){// Do the work here--in this case, upload the images.uploadImages();// Indicate whether the work finished successfully with the ResultreturnResult.success();}}
Result برگردانده شده از doWork() به سرویس WorkManager اطلاع می دهد که آیا کار موفق بوده است و در صورت شکست، آیا کار باید دوباره امتحان شود یا خیر.
Result.success() : کار با موفقیت به پایان رسید.
Result.failure() : کار شکست خورد.
Result.retry() : کار شکست خورد و باید طبق خط مشی امتحان مجدد آن در زمان دیگری امتحان شود.
یک WorkRequest ایجاد کنید
هنگامی که کار شما تعریف شد، باید با سرویس WorkManager برنامه ریزی شود تا اجرا شود. WorkManager انعطاف پذیری زیادی در نحوه برنامه ریزی کار خود ارائه می دهد. میتوانید برنامهریزی کنید که به صورت دورهای در یک بازه زمانی اجرا شود ، یا میتوانید آن را برای اجرای تنها یک بار برنامهریزی کنید.
به هر حال شما زمانبندی کار را انتخاب کنید، همیشه از WorkRequest استفاده خواهید کرد. در حالی که یک Worker واحد کار را تعریف میکند، یک WorkRequest (و زیر کلاسهای آن) نحوه و زمان اجرای آن را مشخص میکند. در ساده ترین حالت، می توانید از OneTimeWorkRequest استفاده کنید، همانطور که در مثال زیر نشان داده شده است.
زمان دقیقی که کارگر قرار است اجرا شود به محدودیت هایی که در WorkRequest شما استفاده می شود و بهینه سازی سیستم بستگی دارد. WorkManager برای ارائه بهترین رفتار تحت این محدودیت ها طراحی شده است.
مراحل بعدی
این راهنمای شروع فقط سطح را خراش می دهد. WorkRequest همچنین میتواند شامل اطلاعات اضافی باشد، مانند محدودیتهایی که کار باید تحت آن اجرا شود، ورودی کار، تاخیر و خطمشی عقبنشینی برای تلاش مجدد کار. در بخش بعدی، درخواستهای کاری خود را تعریف کنید ، در مورد این گزینهها با جزئیات بیشتر اطلاعات بیشتری کسب خواهید کرد و همچنین درک درستی از نحوه زمانبندی کار منحصربهفرد و تکراری خواهید داشت.
منابع اضافی
علاوه بر مستندات راهنما، چندین وبلاگ، آزمایشگاه کد و نمونه کد برای کمک به شما در شروع کار موجود است.
نمونه ها
Sunflower ، یک برنامه آزمایشی که بهترین شیوه ها را با اجزای مختلف معماری، از جمله WorkManager نشان می دهد.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-30 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-07-30 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Getting started with WorkManager\n\nTo 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\n### Groovy\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\n### Kotlin\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---------------\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\n### Kotlin\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\n### Java\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--------------------\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\n### Kotlin\n\n```kotlin\nval uploadWorkRequest: WorkRequest =\n OneTimeWorkRequestBuilder\u003cUploadWorker\u003e()\n .build()\n```\n\n### Java\n\n```java\nWorkRequest uploadWorkRequest =\n new OneTimeWorkRequest.Builder(UploadWorker.class)\n .build();\n```\n\nSubmit the WorkRequest to the system\n------------------------------------\n\nFinally, you need to submit your `WorkRequest` to `WorkManager` using the\n[enqueue()](/reference/androidx/work/WorkManager#enqueue(androidx.work.WorkRequest))\nmethod. \n\n### Kotlin\n\n```kotlin\nWorkManager\n .getInstance(myContext)\n .enqueue(uploadWorkRequest)\n```\n\n### Java\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----------\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--------------------\n\nIn addition to guide documentation, there are several blogs, codelabs, and code\nsamples available to help you get started.\n\n### Samples\n\n- [Sunflower](https://github.com/android/sunflower), a demo app demonstrating best practices with various architecture components, including WorkManager.\n\n### Codelabs\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\n### Blogs\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)"]]