مخطط مهام Kotlin: kotlinx-coroutines-core ومكتبة korGE

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

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

ابدأ الدورة

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



مخطط المهام هو مكون مهم في أي تطبيق، يسمح بتنفيذ الكود وفقًا لجدول زمني، مع تأخير أو بشكل دوري. في لغة Kotlin، خاصة عند التطوير على JVM أو Android أو المشاريع متعددة المنصات، توجد عدة طرق لتنفيذ مخططي المهام. في هذه المقالة، سنستعرض بالتفصيل الأدوات الرئيسية: الإمكانيات المضمنة kotlinx-coroutines-core، java.util.Timer، java.util.concurrent.Executors، بالإضافة إلى المكتبة المتخصصة korGE للألعاب والرسوم المتحركة.



1. مخطط المهام القائم على Coroutines (kotlinx-coroutines-core)



هذه هي الطريقة الأكثر حداثة وموصى بها لتطبيقات Kotlin. توفر مكتبة kotlinx-coroutines-core وسائل مرنة لتنفيذ الكود بشكل مؤجل ودوري.



التثبيت

أضف التبعية في ملف build.gradle.kts:

dependencies {    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")}


المهمة المؤجلة (delay)

تأخير بسيط للتنفيذ باستخدام delay داخل Coroutine:

import kotlinx.coroutines.*

fun main() = runBlocking { println("البداية: ${System.currentTimeMillis()}") delay(2000) // تأخير لمدة ثانيتين println("تم التنفيذ بعد ثانيتين: ${System.currentTimeMillis()}")}


المهمة الدورية عبر launch و while

import kotlinx.coroutines.*

fun main() = runBlocking { val job = launch { repeat(5) { i -> println("المهمة #${i + 1}: ${System.currentTimeMillis()}") delay(1000) } } job.join()}


استخدام Dispatchers للخيوط الخلفية

يمكن لمخطط المهام العمل على موزعين مختلفين، مثل Dispatchers.IO لعمليات الشبكة:

import kotlinx.coroutines.*

fun main() = runBlocking { val job = launch(Dispatchers.IO) { println("يتم التنفيذ في الخيط: ${Thread.currentThread().name}") delay(3000) println("تم الإنهاء") } job.join()}


2. مخطط المهام الكلاسيكي: java.util.Timer



إذا كنت تعمل في بيئة JVM وترغب في استخدام النهج التقليدي، فإن Timer و TimerTask مناسبان للسيناريوهات البسيطة.



import java.util.*

fun main() { val timer = Timer() val task = object : TimerTask() { override fun run() { println("مهمة دورية: ${System.currentTimeMillis()}") } } // تشغيل المهمة بعد ثانية واحدة، ثم كل ثانيتين timer.schedule(task, 1000, 2000)

// الإيقاف بعد 10 ثوانٍ Thread.sleep(10000) timer.cancel()}


مهمة مؤجلة لمرة واحدة

val timer = Timer()timer.schedule(object : TimerTask() {    override fun run() {        println("مهمة لمرة واحدة بعد 3 ثوانٍ")    }}, 3000)


3. مخطط المهام مع Executors (ScheduledExecutorService)



أداة أكثر قوة ومرونة من Java Concurrency، تتكامل بشكل جيد مع Kotlin.



import java.util.concurrent.*

fun main() { val scheduler = Executors.newScheduledThreadPool(2)

// مهمة بتأخير scheduler.schedule({ println("مهمة مؤجلة: ${System.currentTimeMillis()}") }, 2, TimeUnit.SECONDS)

// مهمة دورية بتأخير ثابت val periodicTask = scheduler.scheduleWithFixedDelay({ println("مهمة دورية: ${System.currentTimeMillis()}") }, 1, 3, TimeUnit.SECONDS)

// الإيقاف بعد 15 ثانية Thread.sleep(15000) periodicTask.cancel(false) scheduler.shutdown()}


4. مكتبة متخصصة: korGE (للألعاب والرسوم المتحركة)

توصيات