شروع کار با WorkManager

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

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

Groovy

dependencies {
    def work_version = "2.9.1"

    // (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.9.1"

    // (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 که تصاویر را آپلود می کند، می توانید موارد زیر را انجام دهید:

کاتلین

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 خود را با استفاده از متد enqueue() به WorkManager ارسال کنید.

کاتلین

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

جاوا

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

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

مراحل بعدی

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

منابع اضافی

علاوه بر مستندات راهنما، چندین وبلاگ، آزمایشگاه کد و نمونه کد برای کمک به شما در شروع کار موجود است.

نمونه ها

  • WorkManagerSample ، یک برنامه ساده برای پردازش تصویر.
  • Sunflower ، یک برنامه آزمایشی که بهترین شیوه ها را با اجزای مختلف معماری، از جمله WorkManager نشان می دهد.

Codelabs

وبلاگ ها