جدولة المهام

عندما تريد تنفيذ مهام ستستمر في العمل حتى إذا خرج التطبيق من حالة الظهور، ننصحك باستخدام مكتبة 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 وواجهات برمجة التطبيقات المشابهة. ويمكن أن تساعدك هذه المعلومات في اختيار واجهة برمجة التطبيقات المناسبة لمتطلبات تطبيقك.

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

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

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

البدء

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

مراجع إضافية

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

الفيديوهات

المدوّنات

نماذج