بدء استخدام WorkManager

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

أضِف التبعيات التالية إلى ملف build.gradle في تطبيقك:

رائع

dependencies {
    def work_version = "2.9.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"
}

Kotlin

dependencies {
    val work_version = "2.9.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"
}

بمجرد إضافة التبعيات ومزامنة مشروع 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);

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

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

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

مراجع إضافية

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

عيّنات

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

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

المدوّنات