تكرار السؤال: …
الإجابة المختصرة
OneTimeWorkRequest ينفذ المهمة مرة واحدة فقط، بينما PeriodicWorkRequest ينفذها بصفة دورية متكررة والحد الأدنى للفاصل الزمني هو 15 دقيقة لتوفير الطاقة.
الشرح
تفرض مكتبة WorkManager حدًا أدنى 15 دقيقة لفاصل PeriodicWorkRequest (الثابت PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS) لتفادي استنزاف موارد الجهاز والبطارية. كما تدعم المهام الدورية نافذة مرونة (Flex Period) تحدد متى يمكن للنظام تشغيل المهمة داخل كل دورة تكرار وفق الشروط المحددة وتجميع مهام النظام في وقت واحد (Batching).
مثال بالكود
// مهمة دورية تنفذ مرة واحدة على الأكثر كل 6 ساعات (الفاصل حد أدنى وليس موعدًا دقيقًا):
val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
repeatInterval = 6,
repeatIntervalTimeUnit = TimeUnit.HOURS,
flexTimeInterval = 30, // نافذة مرونة 30 دقيقة
flexTimeIntervalUnit = TimeUnit.MINUTES
).build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
"SyncWork",
ExistingPeriodicWorkPolicy.KEEP,
syncRequest
)أخطاء شائعة
- محاولة ضبط repeatInterval أقل من 15 دقيقة، حيث يتجاهل WorkManager القيمة ويعيد ضبطها قسرًا على 15 دقيقة كحد أدنى تلقائيًا.