جدولة المهام باستخدام WorkManager جزء من Android Jetpack.

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

أنواع العمل الدؤوب

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

  • فورية: المهام التي يجب أن تبدأ على الفور وتكتمل قريبًا. قد يتم تسريعها.
  • التشغيل لفترات طويلة: المهام التي قد تعمل لفترة أطول أو تزيد عن 10 دقائق.
  • مهمة: المهام المجدولة التي تبدأ في وقت لاحق ويمكن تشغيلها بشكل دوري.

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

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

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

النوع التواتر كيفية الوصول إلى الإحصاءات
فورًا مرة واحدة OneTimeWorkRequest، Worker

لتسريع وتيرة العمل، يمكنك الاتصال بـ setExpedited() على OneTimeWorkRequest.

الجري الطويل مرة واحدة أو بشكل دوري أي WorkRequest أو Worker عليك الاتصال بـ setForeground() في العامل للتعامل مع الإشعار.
يمكن تأجيله مرة واحدة أو بشكل دوري PeriodicWorkRequest، Worker

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

استخدام WorkManager لإجراء عمل موثوق

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

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

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

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

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

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

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

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

البدء

راجِع دليل البدء لبدء استخدام WorkManager في تطبيقك.

مراجع إضافية

لمزيد من المعلومات عن WorkManager، يُرجى الاطّلاع على المراجع التالية.

عيّنات

الفيديوهات الطويلة

المدوّنات