قوائم المهام في Kotlin: Coroutines وFlow والمكتبات للمعالجة الخلفية

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

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

ابدأ الدورة

قوائم المهام لـ Kotlin: معالجة خلفية فعالة



في التطوير الحديث باستخدام Kotlin (خاصةً لنظام Android، أو الخلفية باستخدام Ktor أو Spring)، غالبًا ما تكون هناك حاجة لتنظيم تنفيذ المهام في الخلفية دون حظر الخيط الرئيسي. لهذا الغرض، تُستخدم قوائم المهام — وهي آليات تسمح بوضع العمليات في قائمة انتظار وتنفيذها بشكل تسلسلي أو متزامن. في Kotlin، يوفر الدعم المدمج للكوروتينات (coroutines) أدوات قوية لذلك: Channel وFlow والموزعين (dispatchers). بالإضافة إلى ذلك، توجد مكتبات متخصصة مثل Kjob وKotlinx-coroutines التي تُبسّط إدارة المهام.



في هذه المقالة، سنستعرض الأساليب الرئيسية لإنشاء قوائم المهام في Kotlin، ومزاياها، مع تقديم أمثلة عملية للكود.



1. الأدوات المدمجة في Kotlin: Channel وFlow



Channel هو عنصر أساسي لنقل البيانات بين الكوروتينات، يعمل وفق مبدأ "المنتج-المستهلك". وهو مثالي لإنشاء قائمة مهام بسيطة.



import kotlinx.coroutines.*import kotlinx.coroutines.channels.*

suspend fun main() = coroutineScope { val channel = Channel<String>(capacity = 10) // قناة مخزنة

// المنتج (واضع المهام) launch { for (i in 1..5) { val task = "المهمة رقم $i" println("تم وضع: $task") channel.send(task) delay(100) } channel.close() // إغلاق القناة بعد إرسال جميع المهام }

// المستهلك (المعالج) launch { for (task in channel) { // استقبال تلقائي طالما القناة مفتوحة println("جارٍ معالجة: $task") delay(300) // محاكاة العمل } println("تمت معالجة جميع المهام") }}


Flow هو تدفق بيانات غير متزامن بارد (cold)، يمكن استخدامه لإنشاء قائمة مهام مع إمكانية الإلغاء والتحويل.



import kotlinx.coroutines.*import kotlinx.coroutines.flow.*

fun taskQueue(): Flow<String> = flow { for (i in 1..5) { emit("المهمة رقم $i") delay(200) }}

suspend fun main() = coroutineScope { taskQueue() .map { task -> "تمت معالجتها: $task" } .collect { result -> println(result) }}


2. Kotlinx-coroutines: Dispatchers وJob



مكتبة kotlinx-coroutines (جزء من الحزمة الرسمية لـ Kotlin) توفر موزعين (Dispatchers.Default، Dispatchers.IO) لتنفيذ المهام في مجموعة خيوط. باستخدام Job وSupervisorJob يمكن إدارة دورة حياة قائمة المهام.



import kotlinx.coroutines.*

suspend fun main() = coroutineScope { val job = SupervisorJob() val scope = CoroutineScope(Dispatchers.IO + job)

// إضافة مهام إلى قائمة الانتظار scope.launch { repeat(10) { i -> delay(100) println("المهمة $i تُنفذ في ${Thread.currentThread().name}") } }

// انتظار الانتهاء delay(2000) println("الخيط الرئيسي يواصل العمل")}


للسيناريوهات الأكثر تعقيدًا (مثل إعادة المحاولة، التأخير بين المهام) يمكن استخدام kotlinx-coroutines-core مع دوال retry أو withTimeout.



3. مكتبة متخصصة: Kjob



Kjob هي مكتبة خفيفة لإدارة المهام الخلفية في Kotlin، تدعم قوائم الانتظار والتأخير وإعادة المحاولة والمراقبة. تعمل فوق الكوروتينات ولا تتطلب تبعيات خارجية.



التثبيت عبر Gradle:

implementation("io.github.oshai:kjob:2.2.0")


مثال على الاستخدام:



import io.                    

توصيات