مخطط مهام Kotlin: نظرة عامة وأمثلة استخدام

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مخطط المهام بلغة Kotlin: دليل شامل



مخطط المهام (Task Scheduler) هو أداة قوية تتيح أتمتة تنفيذ إجراءات معينة في وقت محدد أو بوتيرة محددة. في لغة Kotlin، التي تُستخدم بنشاط لتطوير تطبيقات الخادم وتطبيقات Android وحتى البرامج النصية، توجد عدة طرق لتنفيذ مخطط المهام. في هذه المقالة، سنستعرض بالتفصيل الأساليب الرئيسية ومزاياها وسنقدم أمثلة عملية على الكود.



لماذا نحتاج إلى مخطط المهام؟

يحل مخطط المهام العديد من المهام النمطية في التطوير:

  • الإرسال التلقائي للإشعارات (البريد الإلكتروني، إشعارات الدفع) وفقًا لجدول زمني.
  • تنظيف البيانات المؤقتة (ذاكرة التخزين المؤقت، جلسات المستخدم) مرة واحدة يوميًا.
  • المزامنة الدورية مع واجهات برمجة التطبيقات الخارجية أو قواعد البيانات.
  • تنفيذ المهام الخلفية في تطبيقات Android (WorkManager).
  • جدولة النسخ الاحتياطي والتقارير.


الطرق الرئيسية لتنفيذ مخطط المهام في Kotlin



سنستعرض ثلاثة من أشهر الأساليب: استخدام coroutines، و Timer الكلاسيكي، و ScheduledExecutorService من Java. لكل منها خصائصه الخاصة.



1. مخطط المهام باستخدام coroutines في Kotlin

تعتبر coroutines طريقة حديثة وفعالة للعمل مع العمليات غير المتزامنة في Kotlin. لإنشاء مخطط مهام، يكفي استخدام الدالة delay() داخل coroutine. هذا الأسلوب خفيف، لا يحجب الخيط، ومناسب تمامًا للمهام البسيطة.



import kotlinx.coroutines.*

fun main() = runBlocking { println("تم تشغيل المخطط. سيتم تنفيذ المهمة بعد 3 ثوانٍ.")

// جدولة مهمة مع تأخير val job = launch { delay(3000L) // 3 ثوانٍ println("تم تنفيذ المهمة: انتهى الوقت!") }

// انتظار اكتمال المهمة job.join() println("انتهى البرنامج.")}


للمهام المتكررة، استخدم حلقة داخل coroutine:



import kotlinx.coroutines.*

fun main() = runBlocking { println("سيتم تنفيذ المهمة كل ثانيتين لمدة 5 مرات.")

val job = launch { repeat(5) { iteration -> delay(2000L) println("التنفيذ #${iteration + 1}: ${System.currentTimeMillis()}") } }

job.join() println("تم تنفيذ جميع المهام المجدولة.")}


2. Timer الكلاسيكي (Java/Kotlin)

java.util.Timer هو أسلوب بسيط ومألوف لدى العديد من المطورين. يسمح بجدولة المهام مع تأخير وبوتيرة محددة. ومع ذلك، يجب تذكر أن Timer يستخدم خيطًا واحدًا، وإذا استغرقت المهمة وقتًا طويلاً، فقد يؤخر ذلك المهام التالية.



import java.util.*

fun main() { val timer = Timer()

// جدولة مهمة مع تأخير ثانيتين timer.schedule(object : TimerTask() { override fun run() { println("تم تنفيذ المهمة بعد ثانيتين.") } }, 2000L)

// جدولة مهمة متكررة كل 1.5 ثانية، تبدأ بعد ثانية واحدة timer.schedule(object : TimerTask() { override fun run() { println("مهمة متكررة: ${System.currentTimeMillis()}") } }, 1000L, 1500L)

// إعطاء وقت لتنفيذ المهام Thread.sleep(5000L) timer.cancel() println("تم إيقاف Timer.")}


3. ScheduledExecutorService (موصى به للبيئات متعددة الخيوط)

توفر هذه الفئة من Java java.util.concurrent إمكانيات أكثر مرونة: تجمع خيوط، معالجة الاستثناءات، وإلغاء المهام. وهي مفضلة على Timer في المشاريع الجادة.



import java.util.concurrent.*

fun main() { val scheduler = Executors.newScheduledThre

توصيات