جدولة المهام باستخدام WorkManager جزء من Android Jetpack.
WorkManager هو الحلّ المُقترَح للعمل المستمر. يظل العمل مستمرًا عندما يبقى مجدوَلاً من خلال عمليات إعادة تشغيل التطبيق وإعادة تشغيل النظام. ولأنّ معظم عمليات المعالجة في الخلفية تتم على أفضل وجه من خلال العمل المستمر، فإنّ WorkManager هي واجهة برمجة التطبيقات الأساسية التي ننصح بها لتنفيذ عمليات المعالجة في الخلفية.
أنواع الأعمال الثابتة
يعالج WorkManager ثلاثة أنواع من الأعمال المستمرة:
- فورية: المهام التي يجب البدء بها على الفور وإكمالها قريبًا قد يتم تسريع عملية معالجة طلبك.
- المهام التي تستغرق وقتًا طويلاً: المهام التي قد تستغرق وقتًا أطول، ربما أكثر من 10 دقائق
- قابلة للتأجيل: المهام المُجدوَلة التي تبدأ في وقت لاحق ويمكن تنفيذها بصورة دورية
يوضّح الشكل 1 كيفية ارتباط الأنواع المختلفة من الأعمال الثابتة ببعضها البعض.
وبالمثل، يوضّح الجدول التالي الأنواع المختلفة من الأعمال.
النوع | الوتيرة | كيفية الوصول |
---|---|---|
فورًا | مرة واحدة | OneTimeWorkRequest وWorker
بالنسبة إلى المهام المُعجَّلة، يُرجى الاتصال بـ |
العروض التي تستمر لفترة طويلة | لمرة واحدة أو بشكل دوري | أي WorkRequest أو Worker يُرجى الاتصال بالرقم setForeground() في Worker لمعالجة الإشعار.
|
يمكن تأجيلها | لمرة واحدة أو بشكل دوري | PeriodicWorkRequest وWorker
|
لمزيد من المعلومات حول كيفية إعداد WorkManager، اطّلِع على دليل تحديد WorkRequests.
الميزات
بالإضافة إلى توفير واجهة برمجة تطبيقات أبسط وأكثر اتساقًا، يقدّم WorkManager عددًا من المزايا الرئيسية الأخرى:
قيود العمل
حدِّد بشكل صريح الشروط المثلى لتشغيل عملك باستخدام قيود العمل. على سبيل المثال، لا يتم تشغيلها إلا عندما يكون الجهاز متصلاً بشبكة غير محدودة أو عندما يكون الجهاز في وضع السكون أو عندما تكون طاقة البطارية كافية.
جدولة فعّالة
يتيح لك WorkManager جدولة المهام لتشغيلها لمرة واحدة أو بشكل متكرّر باستخدام فترات جدولة مرنة. يمكن أيضًا وضع علامة على العمل وتسميته، ما يتيح لك جدولة عمل فريد وقابل للاستبدال ومراقبة مجموعات العمل معًا أو إلغائها.
يتم تخزين الأعمال المُجدوَلة في قاعدة بيانات SQLite مُدارة داخليًا، ويحرص WorkManager على ضمان استمرار هذه الأعمال وإعادة جدولتها عند إعادة تشغيل الجهاز.
بالإضافة إلى ذلك، يلتزم WorkManager بميزات توفير الطاقة وأفضل الممارسات، مثل وضع "الاستراحة"، لذا لا داعي للقلق بشأنه.
العمل المُعجَّل
يمكنك استخدام WorkManager لجدولة عمل فوري لتنفيذه في الخلفية. يجب استخدام العمل السريع للمهام المهمة للمستخدم والتي تكتمل في غضون بضع دقائق.
سياسة إعادة المحاولة المرنة
في بعض الأحيان، لا تنجح الإجراءات. يوفّر WorkManager سياسات مرنة لإعادة المحاولة، بما في ذلك سياسة الانتظار التزايدي القابلة للضبط.
تسلسل الأعمال
بالنسبة إلى الأعمال المعقدة ذات الصلة، يمكنك ربط مهام العمل الفردية معًا باستخدام واجهة بسيطة تتيح لك التحكّم في الأجزاء التي يتم تشغيلها بشكل تسلسلي وتلك التي يتم تشغيلها بشكل موازٍ.
Kotlin
val continuation = WorkManager.getInstance(context) .beginUniqueWork( Constants.IMAGE_MANIPULATION_WORK_NAME, ExistingWorkPolicy.REPLACE, OneTimeWorkRequest.from(CleanupWorker::class.java) ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java)) .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java)) .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java)) .then( if (save) { workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT) } else /* upload */ { workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT) } )
Java
WorkManager.getInstance(...) .beginWith(Arrays.asList(workA, workB)) .then(workC) .enqueue();
لكل مهمة عمل، يمكنك تحديد بيانات الإدخال والإخراج لهذه المهمة. عند ربط مهام العمل معًا، يُرسِل WorkManager تلقائيًا بيانات الإخراج من مهمة العمل الأولى إلى المهمة التالية.
إمكانية التشغيل التفاعلي المضمّنة لسلاسل المحادثات
يتكامل WorkManager بسلاسة مع Coroutines وRxJava ويوفّر المرونة اللازمة لإدراج واجهات برمجة التطبيقات غير المتزامنة الخاصة بك.
استخدام WorkManager لتنفيذ المهام بشكل موثوق
يُستخدَم WorkManager للأعمال التي يجب تنفيذها بشكل موثوق حتى إذا انتقل المستخدم بعيدًا عن شاشة أو خرج من التطبيق أو أعاد تشغيل الجهاز. على سبيل المثال:
- إرسال السجلات أو الإحصاءات إلى خدمات الخلفية
- مزامنة بيانات التطبيق بصفة دورية مع خادم
لا يُستخدَم WorkManager لتنفيذ مهام في الخلفية يمكن إيقافها بأمان في حال انتهاء عملية التطبيق. ولا يشكّل هذا الإجراء أيضًا حلًا عامًا لكل الأعمال التي تتطلّب التنفيذ الفوري. يُرجى مراجعة دليل processing في الخلفية لمعرفة الحلّ الذي يلبي احتياجاتك.
العلاقة بواجهات برمجة التطبيقات الأخرى
على الرغم من أنّ وحدات التشغيل المتعدّد في وقت واحد هي الحلّ المُقترَح لبعض حالات الاستخدام، يجب عدم استخدامها لتنفيذ مهام مستمرة. من المهم الإشارة إلى أنّ وحدات التشغيل المتعدّد هي إطار عمل للعمليات المتزامنة، في حين أنّ WorkManager هي مكتبة لأعمال الجلسة. وبالمثل، يجب استخدام AlarmManager للساعات أو التقاويم فقط.
واجهة برمجة التطبيقات | المحتوى المقترَح | العلاقة بخدمة WorkManager |
---|---|---|
الدوالّ المتكرّرة | جميع الأعمال غير المتزامنة التي لا تحتاج إلى أن تكون دائمة | وظائف التشغيل المتعدّد هي الوسيلة العادية لمغادرة سلسلة التعليمات الرئيسية في Kotlin. ومع ذلك، يتم حذفها من الذاكرة بعد إغلاق التطبيق. لاستخدام WorkManager، يجب أن يكون العمل مستمرًا. |
AlarmManager | المنبّهات فقط | على عكس WorkManager، يوقِّظ AlarmManager الجهاز من وضع "الاستراحة". وبالتالي، لا تكون هذه الطريقة فعّالة من حيث إدارة الطاقة والموارد. لا تستخدِم هذه الميزة إلا لتنبيهات أو منبّهات دقيقة، مثل أحداث التقويم، وليس لتنفيذ المهام في الخلفية. |
استبدال واجهات برمجة التطبيقات التي تم إيقافها نهائيًا
واجهة برمجة التطبيقات WorkManager API هي البديل المُقترَح لجميع واجهات برمجة التطبيقات السابقة لتحديد المهام في الخلفية على Android، بما في ذلك FirebaseJobDispatcher وGcmNetworkManager وJob Scheduler.
الخطوات الأولى
اطّلِع على دليل البدء لبدء استخدام WorkManager في تطبيقك.
مصادر إضافية
لمزيد من المعلومات عن WorkManager
، يُرجى الاطّلاع على المراجع التالية.
نماذج
الفيديوهات
- سلسلة فيديوهات Workmanager - مهارات النهج الحديث لتطوير البرامج المتوافقة مع Android
- العمل مع WorkManager، من مؤتمر Android Dev Summit لعام 2018
- WorkManager: مزيد من المعلومات حول الأساسيات، من مؤتمر Android Dev Summit لعام 2019
المدوّنات
أفلام مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عندما تكون لغة JavaScript غير مفعّلة.
- بدء تشغيل التطبيق