بدء استخدام WorkManager

لبدء استخدام WorkManager، عليك أولاً استيراد المكتبة إلى مشروع Android.

أضِف التبعيات التالية إلى ملف 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 يحمّل الصور، يمكنك إجراء ما يلي:

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

يُعلم الرمز البرمجي Result المُرسَل من doWork() خدمة 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 إلى النظام

أخيرًا، عليك إرسال WorkRequest إلى WorkManager باستخدام enqueue().

Kotlin

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

Java

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

يعتمد الوقت الدقيق الذي سيتم فيه تنفيذ Worker على القيود المستخدَمة في WorkRequest وعمليات تحسين النظام. تم تصميم WorkManager لتقديم أفضل أداء في ظل هذه القيود.

الخطوات التالية

لا يقدّم دليل البدء هذا سوى لمحة عن الموضوع. يمكن أن يحتوي WorkRequest أيضًا على معلومات إضافية، مثل القيود التي يجب أن يتم تنفيذ العمل بموجبها، والمدخلات التي يتم تقديمها للعمل، والتأخير، وسياسة الانتظار لإعادة محاولة العمل. في القسم التالي، تحديد طلبات العمل، ستتعرّف على مزيد من المعلومات عن هذه الخيارات بمزيد من التفصيل، بالإضافة إلى التعرّف على كيفية جدولة الأعمال الفريدة والمتكرّرة.

مصادر إضافية

بالإضافة إلى مستندات الإرشادات، تتوفّر عدة مدوّنات ودروس تطبيقية حول الترميز و عيّنات رمزية لمساعدتك على البدء.

نماذج

  • Sunflower: تطبيق تجريبي يعرض أفضل الممارسات باستخدام مكونات بنية مختلفة، بما في ذلك WorkManager

الدروس التطبيقية حول الترميز

المدوّنات