العمل باستمرار جزء من Android Jetpack.

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

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

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

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

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

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

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

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

للحصول على مزيد من المعلومات حول كيفية إعداد WorkManager، يُرجى الاطّلاع على دليل تحديد طلبات العمل.

ميزات 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 للساعات أو التقاويم فقط.

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

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

إنّ WorkManager API هي البديل المقترَح لجميع واجهات برمجة التطبيقات السابقة لجدولة الخلفية في نظام التشغيل Android، بما في ذلك FirebaseJobDispatcher وGcmNetworkManager وJobScheduler.

البدء

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

مراجع إضافية

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

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

المدوّنات

العيّنات