برنامه‌نویسی اندروید

آموزش Coroutines | Coroutines برای تازه کارها

آموزش Coroutines

در برنامه‌نویسی مدرن اندروید، مدیریت کارهای زمان‌بر مانند:

  • دریافت اطلاعات از اینترنت
  • خواندن دیتابیس
  • دانلود فایل
  • اجرای عملیات سنگین

بسیار مهم است. اگر این عملیات به‌درستی مدیریت نشوند، برنامه کند می‌شود و حتی ممکن است با خطای ANR (Application Not Responding) مواجه شود.

در گذشته توسعه‌دهندگان اندروید از:

  • Thread
  • AsyncTask
  • Callback

استفاده می‌کردند، اما این روش‌ها پیچیده و سخت‌نگهداری بودند.

امروزه بهترین راه‌حل برای مدیریت عملیات غیرهمزمان در Kotlin استفاده از:
Kotlin Coroutines

است.

در این مقاله، به زبان ساده و قدم‌به‌قدم با Coroutines آشنا می‌شویم.

Coroutine در اندروید

Coroutine چیست؟

Coroutine یک روش مدرن برای اجرای عملیات Asynchronous و Non-blocking است.

به زبان ساده:

  • Coroutine اجازه می‌دهد کدهای زمان‌بر را بدون قفل کردن UI اجرا کنید.

در حالی که ظاهر کد همچنان ساده و خوانا باقی می‌ماند.

چرا Coroutines مهم هستند؟

در Android همه چیز روی Main Thread اجرا می‌شود.

اگر عملیات سنگینی روی Main Thread اجرا شود:

  • UI فریز می‌شود
  • اسکرول کند می‌شود
  • برنامه کرش می‌کند

Coroutine این مشکل را حل می‌کند.

وظیفه coroutine در اندروید

تفاوت Coroutine و Thread

ویژگی Thread Coroutine
مصرف حافظه زیاد کم
سرعت کمتر بیشتر
مدیریت سخت ساده
تعداد زیاد مشکل‌ساز مناسب

افزودن Coroutines به پروژه

در فایل build.gradle:

implementation 
"org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"

اولین Coroutine

GlobalScope.launch {

    delay(2000)

    println("Hello Coroutine")
}

توضیح کد بالا

launch

یک Coroutine جدید ایجاد می‌کند.

delay

اجرای Coroutine را بدون Block کردن Thread متوقف می‌کند.

کورتتین در اندروید

مهم‌ترین مفاهیم Coroutines

1️⃣ suspend function

توابع suspend قابلیت Pause شدن دارند.

مثال:

suspend fun fetchData() {

    delay(3000)

    println("Data Loaded")
}

چرا suspend مهم است؟

چون عملیات:

  • شبکه
  • دیتابیس
  • فایل

معمولاً زمان‌بر هستند.

2️⃣ launch

برای اجرای Coroutine استفاده می‌شود.

مثال:

CoroutineScope(Dispatchers.IO).launch {

    fetchData()
}

3️⃣ async

برای دریافت مقدار خروجی.

مثال:

val result = async {

    fetchData()
}

تفاوت launch و async

launch async
بدون خروجی دارای خروجی
Job برمی‌گرداند Deferred برمی‌گرداند

Dispatchers در کروتین

4️⃣ Dispatchers

Dispatcher مشخص می‌کند Coroutine روی چه Threadی اجرا شود.

انواع Dispatcher

Dispatchers.Main

برای:

  • UI
  • View

Dispatchers.IO

برای:

  • Network
  • Database
  • File

Dispatchers.Default

برای:

  • عملیات سنگین CPU

مثال:

CoroutineScope(Dispatchers.IO).launch {

}

delay vs Thread.sleep

اشتباه ❌

Thread.sleep(3000)

این کد Thread را Block می‌کند.

درست ✅

delay(3000)

CoroutineScope چیست؟

Scope محدوده اجرای Coroutine است.

انواع Scope

GlobalScope

سراسری.

lifecycleScope

مخصوص Activity/Fragment.

viewModelScope

مخصوص ViewModel.

استفاده در ViewModel

viewModelScope.launch {

    fetchData()
}

چرا viewModelScope مهم است؟

وقتی ViewModel Destroy شود:

  • Coroutine خودکار Cancel می‌شود.

اجرای عملیات شبکه

مثال Retrofit + Coroutine

@GET("posts")
suspend fun getPosts(): List<Post>

استفاده:

viewModelScope.launch {

    val posts = api.getPosts()
}

مدیریت خطاها

try/catch

viewModelScope.launch {

    try {

        fetchData()

    } catch (e: Exception) {

        println(e.message)

    }
}

اجرای چند Coroutine همزمان

async + await

viewModelScope.launch {

    val user = async {
        getUser()
    }

    val posts = async {
        getPosts()
    }

    println(user.await())
    println(posts.await())
}

Cancellation در Coroutine

Coroutineها قابل Cancel شدن هستند.

مثال:

val job = launch {

}

job.cancel()

بهترین روش‌ها در Coroutines

✅ از GlobalScope استفاده نکنید

چون Memory Leak ایجاد می‌کند.

✅ از lifecycleScope استفاده کنید

برای Activity و Fragment.

✅ عملیات شبکه روی IO

Dispatchers.IO

✅ عملیات UI روی Main

Dispatchers.Main

اشتباهات رایج

❌ اجرای عملیات سنگین روی Main Thread

❌ استفاده زیاد از GlobalScope

❌ فراموش کردن مدیریت خطا

Coroutines در Jetpack Compose

در Jetpack Compose معمولاً از:

LaunchedEffect

استفاده می‌شود.

مثال:

LaunchedEffect(Unit) {

    fetchData()
}

مزایای Coroutines

✅ کدنویسی ساده‌تر

✅ Performance بهتر

✅ خوانایی بالا

✅ مدیریت آسان Async Taskها

جمع‌بندی

Kotlin Coroutines یکی از مهم‌ترین ابزارهای مدرن در توسعه اندروید است که اجرای عملیات غیرهمزمان را بسیار ساده‌تر می‌کند.

با استفاده از Coroutines:

  • برنامه سریع‌تر می‌شود
  • UI روان‌تر می‌شود
  • کدها خواناتر می‌شوند
  • مدیریت Threadها آسان‌تر می‌شود

اگر قصد دارید اپلیکیشن حرفه‌ای اندروید توسعه دهید، یادگیری Coroutines کاملاً ضروری است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *