آموزش Coroutines | Coroutines برای تازه کارها
در برنامهنویسی مدرن اندروید، مدیریت کارهای زمانبر مانند:
- دریافت اطلاعات از اینترنت
- خواندن دیتابیس
- دانلود فایل
- اجرای عملیات سنگین
بسیار مهم است. اگر این عملیات بهدرستی مدیریت نشوند، برنامه کند میشود و حتی ممکن است با خطای ANR (Application Not Responding) مواجه شود.
در گذشته توسعهدهندگان اندروید از:
- Thread
- AsyncTask
- Callback
استفاده میکردند، اما این روشها پیچیده و سختنگهداری بودند.
امروزه بهترین راهحل برای مدیریت عملیات غیرهمزمان در Kotlin استفاده از:
Kotlin Coroutines
است.
در این مقاله، به زبان ساده و قدمبهقدم با Coroutines آشنا میشویم.

Coroutine چیست؟
Coroutine یک روش مدرن برای اجرای عملیات Asynchronous و Non-blocking است.
به زبان ساده:
- Coroutine اجازه میدهد کدهای زمانبر را بدون قفل کردن UI اجرا کنید.
در حالی که ظاهر کد همچنان ساده و خوانا باقی میماند.
چرا Coroutines مهم هستند؟
در Android همه چیز روی Main Thread اجرا میشود.
اگر عملیات سنگینی روی Main Thread اجرا شود:
- UI فریز میشود
- اسکرول کند میشود
- برنامه کرش میکند
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 برمیگرداند |
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 کاملاً ضروری است.
