تكرار السؤال: …
الإجابة المختصرة
هي مكتبة لإدارة المهام المضمونة التنفيذ حتى لو أُغلق التطبيق أو أُعيد تشغيل الجهاز، مع إمكانية ربطها بشروط (Constraints) مثل الاتصال بالإنترنت أو الشحن.
الشرح
تعتمد WorkManager داخليًا على JobScheduler في الإصدارات الحديثة وتخزن المهام في قاعدة بيانات SQLite محلية لضمان استمراريتها. تتيح تحديد شروط لتنفيذ المهمة، وإذا انقطعت الشروط أثناء العمل، يتم إيقاف العامل بأمان وإعادة جدولته تلقائيًا باستخدام سياسات التراجع التدريجي (Exponential Backoff).
مثال بالكود
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED) // يتطلب شبكة Wi-Fi
.setRequiresCharging(true) // يتطلب الاتصال بالشاحن
.build()
val uploadWork = OneTimeWorkRequestBuilder<UploadWorker>()
.setConstraints(constraints)
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 15, TimeUnit.MINUTES)
.build()
WorkManager.getInstance(context).enqueue(uploadWork)أخطاء شائعة
- استخدام WorkManager للمهام الفورية السريعة التي يجب أن تكتمل في اللحظة الحالية فقط أثناء تفاعل المستخدم، حيث يكون CoroutineScope العادي أفضل بكثير.