المهام المستمرة   جزء من Android Jetpack

تكون المهام مستمرة عندما تظل مُجدوَلة خلال عمليات إعادة تشغيل التطبيق وإعادة تشغيل النظام. WorkManager هو الحلّ المقترَح لتنفيذ المهام المستمرة. وبما أنّ أفضل طريقة لتنفيذ معظم عمليات المعالجة في الخلفية هي من خلال العمل المستمر، فإنّ WorkManager هي أيضًا واجهة برمجة التطبيقات الأساسية التي ننصح باستخدامها بشكل عام لتنفيذ عمليات المعالجة في الخلفية.

أنواع العمل المستمر

يتعامل WorkManager مع ثلاثة أنواع من العمل المستمر:

  • عاجلة: المهام التي يجب البدء بها على الفور وإكمالها قريبًا يمكن تسريعها.
  • المهام الطويلة المدى: هي المهام التي قد تستغرق وقتًا أطول، ربما أكثر من 10 دقائق.
  • قابلة للتأجيل: مهام مُجدوَلة تبدأ في وقت لاحق ويمكن تنفيذها بشكل دوري.

يوضّح الشكل 1 كيفية ارتباط الأنواع المختلفة من العمليات المستمرة ببعضها البعض.

قد يكون العمل المستمر فوريًا أو طويل الأمد أو يمكن تأجيله
الشكل 1: أنواع العمل المستمر.

وبالمثل، يوضّح الجدول التالي الأنواع المختلفة من العمل.

النوع التواتر كيفية الوصول
فورًا مرة واحدة OneTimeWorkRequest وWorker للحصول على رد سريع على استفساراتك، يُرجى الاتصال بـ setExpedited() على OneTimeWorkRequest.
العمليات الطويلة الأمد مرة واحدة أو بشكل دوري أي WorkRequest أو Worker استدعِ الدالة setForeground() في Worker للتعامل مع الإشعار.
قابلة للتأجيل مرة واحدة أو بشكل دوري PeriodicWorkRequest وWorker

لمزيد من المعلومات حول كيفية إعداد WorkManager، راجِع دليل تحديد WorkRequests.

ميزات WorkManager

بالإضافة إلى توفير واجهة برمجة تطبيقات أبسط وأكثر اتساقًا، تقدّم 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 بسلاسة مع الروتينات المشتركة وRxJava وتوفّر المرونة اللازمة لإضافة واجهات برمجة التطبيقات غير المتزامنة الخاصة بك.

استخدام WorkManager لتنفيذ المهام بشكل موثوق

تم تصميم WorkManager لتنفيذ المهام التي يجب تشغيلها بشكل موثوق حتى إذا انتقل المستخدم إلى شاشة أخرى أو خرج من التطبيق أو أعاد تشغيل الجهاز. على سبيل المثال:

  • إرسال السجلات أو الإحصاءات إلى الخدمات الخلفية
  • مزامنة بيانات التطبيق بشكل دوري مع خادم

لا يُستخدَم WorkManager لتنفيذ مهام في الخلفية داخل العملية يمكن إنهاؤها بأمان إذا توقفت عملية التطبيق. وهي ليست أيضًا حلاً عامًا لجميع المهام التي تتطلّب تنفيذًا فوريًا. يُرجى مراجعة دليل المعالجة في الخلفية لمعرفة الحلّ الذي يلبي احتياجاتك.

العلاقة بواجهات برمجة التطبيقات الأخرى

على الرغم من أنّ الروتينات المشتركة هي الحلّ المقترَح لبعض حالات الاستخدام، إلا أنّه لا يجب استخدامها لتنفيذ مهام مستمرة. من المهم ملاحظة أنّ الروتينات المشتركة هي إطار عمل للتنفيذ المتزامن، بينما WorkManager هي مكتبة لتنفيذ المهام بشكل مستمر. وبالمثل، يجب استخدام AlarmManager للساعات أو التقاويم فقط.

واجهة برمجة التطبيقات ينصح به مع العلاقة بين WorkManager وخدمة الخلفية
الروتينات الفرعية جميع المهام غير المتزامنة التي لا تحتاج إلى أن تكون مستمرة تُعدّ الروتينات الفرعية الوسيلة العادية لمغادرة سلسلة التعليمات الرئيسية في Kotlin. ومع ذلك، يتم إخلاء مساحة الذاكرة عند إغلاق التطبيق. بالنسبة إلى العمل المستمر، استخدِم WorkManager.
AlarmManager المنبّهات فقط على عكس WorkManager، يمكن لـ AlarmManager تنبيه الجهاز من "وضع قيلولة". لذلك، لا تكون هذه الطريقة فعّالة من حيث إدارة الطاقة والموارد. استخدِمها فقط للمنبّهات أو الإشعارات الدقيقة، مثل أحداث التقويم، وليس للعمل في الخلفية.

استبدال واجهات برمجة التطبيقات المتوقفة نهائيًا

تُعدّ واجهة برمجة التطبيقات WorkManager بديلاً يُنصح به لواجهات برمجة التطبيقات السابقة الخاصة بجدولة المهام في الخلفية على Android، بما في ذلك FirebaseJobDispatcher وGcmNetworkManager.

البدء

يمكنك الاطّلاع على دليل البدء لبدء استخدام WorkManager في تطبيقك.

مراجع إضافية

تقدّم الأقسام التالية بعض المراجع الإضافية.

الفيديوهات

المدوّنات

نماذج