شروع به کار با WorkManager

برای شروع استفاده از WorkManager، ابتدا کتابخانه را به پروژه Android خود وارد کنید.

وابستگی‌های زیر را به فایل build.gradle برنامه‌تان اضافه کنید:

گرووی

dependencies {
    def work_version = "2.12.0"

    // (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"
}

کاتلین

dependencies {
    val work_version = "2.12.0"

    // (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")
}

Once you’ve added the dependencies and synchronized your Gradle project, the next step is to define some work to run.

تعریف کار

کار بااستفاده از کلاس Worker تعریف می‌شود. روش doWork() به‌صورت ناهمگام در رشته پس‌زمینه ارائه‌شده توسط WorkManager اجرا می‌شود.

برای ایجاد کاری که WorkManager اجرا کند، کلاس Worker را گسترش دهید و روش doWork() را لغو کنید. برای مثال، برای ایجاد Worker که تصاویر را بارگذاری می‌کند، می‌توانید کارهای زیر را انجام دهید:

کاتلین

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()
   }
}

جاوا

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();
   }
}

Result برگشت‌داده‌شده از doWork() به سرویس WorkManager اطلاع می‌دهد که آیا کار موفقیت‌آمیز بوده است یا نه و درصورت ناموفق بودن، آیا کار باید دوباره امتحان شود یا نه.

  • Result.success(): کار با موفقیت تمام شد.
  • Result.failure(): کار ناموفق بود.
  • Result.retry(): کار ناموفق بود و باید در زمان دیگری طبق خط‌مشی تکرار مجدد آن امتحان شود.

ایجاد WorkRequest

وقتی کارتان تعریف شد، باید با سرویس WorkManager زمان‌بندی شود تا اجرا شود. WorkManager انعطاف‌پذیری زیادی در نحوه زمان‌بندی کارتان ارائه می‌دهد. می‌توانید آن را برای اجرای دوره‌ای در یک بازه زمانی زمان‌بندی کنید، یا می‌توانید آن را برای اجرا فقط یک‌بار زمان‌بندی کنید.

هرطور که بخواهید کار را زمان‌بندی کنید، همیشه از WorkRequest استفاده خواهید کرد. درحالی‌که Worker واحد کار را تعریف می‌کند، WorkRequest (و زیرکلاس‌های آن) نحوه و زمان اجرای آن را تعریف می‌کنند. در ساده‌ترین حالت، می‌توانید از OneTimeWorkRequest استفاده کنید، همان‌طور که در مثال زیر نشان داده شده است.

کاتلین

val uploadWorkRequest: WorkRequest =
   OneTimeWorkRequestBuilder<UploadWorker>()
       .build()

جاوا

WorkRequest uploadWorkRequest =
   new OneTimeWorkRequest.Builder(UploadWorker.class)
       .build();

ارسال WorkRequest به سیستم

درنهایت، باید WorkRequest خود را بااستفاده از روش enqueue() به WorkManager ارسال کنید.

کاتلین

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

جاوا

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest);

زمان دقیق اجرای کارگر به محدودیت‌های استفاده‌شده در WorkRequest و بهینه‌سازی‌های سیستم بستگی دارد. WorkManager به‌گونه‌ای طراحی شده است که بهترین رفتار را تحت این محدودیت‌ها ارائه دهد.

مراحل بعدی

این راهنمای شروع به کار فقط به اصول اولیه می‌پردازد. WorkRequest می‌تواند شامل اطلاعات اضافی نیز باشد، مثل محدودیت‌هایی که تحت آن‌ها کار باید اجرا شود، ورودی کار، تأخیر، و خط‌مشی عقب‌نشینی برای امتحان مجدد کار. در بخش بعدی، تعریف درخواست‌های کاری، با جزئیات بیشتری درباره این گزینه‌ها آشنا خواهید شد و همچنین درک بهتری از نحوه زمان‌بندی کارهای منحصربه‌فرد و تکرارشونده به‌دست خواهید آورد.

منابع بیشتر

علاوه‌بر اسناد راهنما، چندین وبلاگ، codelab، و نمونه کد برای کمک به شما در شروع کار دردسترس است.

نمونه‌ها

  • Sunflower، یک برنامه نمایشی که روال‌های مطلوب را با مؤلفه‌های معماری مختلف، ازجمله WorkManager، نشان می‌دهد.

Codelabs

وبلاگ‌ها