لبدء استخدام 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
الدروس التطبيقية حول الترميز
- العمل مع WorkManager (Kotlin) و(Java)
- WorkManager المتقدّم (Kotlin)
المدوّنات
- التعرّف على WorkManager
- أساسيات WorkManager
- WorkManager وKotlin
- التردد في WorkManager
- تخصيص WorkManager - الأساسيات
- تخصيص WorkManager باستخدام Dagger