آموزش جامع کروتینز در اندروید: صفر تا صد coroutines در کاتلین
کروتینز در اندروید یک کتابخانه و فریمورک برای برنامه نویسی ناهمزمان در Kotlin در پلتفرم اندروید است. این روشی را برای نوشتن کدهای غیرهمزمان بدون نگرانی از بلاک شدن و فریز شدن ارائه می دهد که خواندن، نوشتن و نگهداری آن آسان است.
در این مقاله از سری مقالات کاتلین می خواهیم شما را با آموزش جامع کروتینز در اندروید آشنا کنیم و مزایا و معایب آن را مورد بررسی قرار دهیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
توی دوره ژنرال صفر تا صد کروتینز در اندروید رو در یک فصل کامل توضیح دادیم و همچنین توی پروژه های دیجی کالا و اسنپ فود به صورت عملی و پروژه محور از کروتینز استفاده کردیم و بطور کامل اون رو آموزش دادیم.
مقدمه
Coroutines یک ویژگی زبان معرفی شده در Kotlin است که به شما امکان می دهد کدهای ناهمزمان را به شیوه ای متوالی و ساختارمندتر بنویسید. و راهی برای انجام وظایف به صورت ناهمزمان و بدون نیاز به callback یا threading صریح ارائه می دهند. که این نکته بسیار مهمی در برنامه نویسی است.
با Kotlin Coroutines، میتوانید کد ناهمزمانی بنویسید که شبیه کدهای متوالی معمولی به نظر میرسد و رفتار آن را آسانتر میکند و درک و نگهداری آن را آسانتر میکند. Coroutine ها را می توان با اجزای مختلف Android مانند Activities، Fragments و ViewModels استفاده کرد تا عملیات همزمان و ناهمزمان را به روشی کارآمدتر و مختصر انجام دهد. با استفاده از کروتینز دیگر بابت تردها و نخهای سیستم عامل اندروید هیچ نگرانی نداریم و کروتیز این موارد رو بطور خودکار و به بهترین شکل ممکن مدیریت میکند.
کروتینز (Coroutines) چیست؟
کروتینز در اندروید از طریق کتابخانهای به نام Kotlin Coroutines معرفی شده. این کتابخانه به برنامهنویسان امکان استفاده از برنامهنویسی همروند را با استفاده از اصولی ساده و قدرتمند از زبان Kotlin میدهد.
یک coroutine در اصل یک الگوی برنامهنویسی است که به شما امکان میدهد کدهای همروند را به صورت سادهتر و خواناتری نوشته و اجرا کنید. به عنوان مثال، شما میتوانید یک عملیات پشت صحنه را در یک coroutine اجرا کنید و منتظر پاسخ آن نباشید تا برنامه شما قفل نشود. همچنین میتوانید از coroutines برای اجرای عملیاتهای مربوط به واسط کاربری (UI) در نخ اصلی بدون ایجاد بسته شدن (blocking) استفاده کنید.
-
با استفاده از Kotlin Coroutines در اندروید، میتوانید انواعی از عملیاتهای همروند را اجرا کنید، از جمله:
1. دسترسی به پایگاه داده
شما میتوانید کوئریهای پایگاه داده را در یک coroutine اجرا کنید بدون اینکه نخ اصلی برنامه را مسدود کنید. این کار به شما کمک میکند تا از عملکرد بهتری برخوردار شوید و برنامه را بیشتر بهینه کنید.
2. اجرای عملیات شبکه
شما میتوانید درخواستهای HTTP به سرور را در یک coroutine ارسال کنید و منتظر پاسخ آن نباشید. این کار به شما امکان میدهد برنامه خود را به صورت ناهمزمان (asynchronous) طراحی کنید و از بسته شدن نخ اصلی جلوگیری کنید.
3. اجرای عملیات محاسباتی سنگین
شما میتوانید عملیاتهای محاسباتی سنگین را در یک coroutine اجرا کنید تا برنامه شما به صورت روانتر و بدون توقف اجرا شود.
برای استفاده از coroutines در اندروید، شما باید به پروژه خود کتابخانه Kotlin Coroutines را اضافه کنید و از توابع و ابزارهای مربوطه استفاده کنید. با استفاده از کلیدواژه suspend میتوانید توابع همروند را تعریف کنید و با استفاده از توابعی مانند launch و async میتوانید coroutines را ایجادو کنترل کنید.
مزایای coroutines در اندروید
1. سادگی و خوانایی بالا
با استفاده از coroutines، میتوانید کدهای همروند را به صورت خواناتر و قابل فهمتری نوشته و تعامل کنید. این الگوی برنامهنویسی به شما امکان میدهد از تواناییهای همروندی برنامه بهره ببرید بدون اینکه کدهای پیچیده و سختخوان را نوشته و مدیریت کنید.
2. کاهش بسته شدن (blocking)
با استفاده از coroutines، میتوانید از بسته شدن نخ اصلی برنامه جلوگیری کنید. این به این معنی است که برنامه شما همچنان قابل پاسخگویی باقی میماند و کاربر میتواند با آن تعامل کند در حالی که عملیاتهای همروند در پسزمینه انجام میشوند.
3. مدیریت منابع بهتر
با استفاده از coroutines و suspend functions، میتوانید بهترین استفاده را از منابع مانند پایگاه دادهها، شبکه و فایلها بکنید. به عنوان مثال، شما میتوانید منابع را برای مدت زمان لازم برای انجام عملیات رزرو کنید و پس از اتمام عملیات، آنها را آزاد کنید.
4. امکان تعیین برخی از خصوصیات عملکرد coroutines
مانند تاخیر (delay)، تکرار (repeat) و تنظیمات مربوط به نخها (thread) و dispatcherها.
5. سازگاری با برنامهنویسی رویدادمحور
coroutines با برنامهنویسی رویدادمحور (event-driven) سازگار هستند و شما میتوانید آنها را به عنوان جایگزینی برای روشهای سنتی مانند Callback و flow استفاده کنید.
در اندروید، میتوانید coroutines را در پروژههای Kotlin استفاده کنید و با استفاده از کتابخانههای مربوطه مانند kotlinx.coroutines بهرهبرداری کنید. با استفاده از این کتابخانه، میتوانید از اصول و قابلیتهای coroutines بهره ببرید و برنامههای همروند و reactive را بسازید.
یک مثال کامل از پیادهسازی coroutines با استفاده از زبان Kotlin
import kotlinx.coroutines.* fun main() { println("شروع برنامه") CoroutineScope(Dispatchers.Default).launch { println("شروع کروتین") delay(2000) // تاخیری را شبیهسازی میکند (در اینجا 2 ثانیه) println("پایان کروتین") } println("ادامه اجرای برنامه") // انتظار برای اتمام کروتین Thread.sleep(3000) // منتظر میماند تا کروتین پایان یابد (در اینجا 3 ثانیه) println("پایان برنامه") }
در این مثال نیز، ما یک کروتین ایجاد میکنیم که یک تاخیر 2 ثانیه ایجاد میکند و سپس پیام “پایان کروتین” را چاپ میکند. قبل از ایجاد کروتین، پیام “شروع برنامه” چاپ میشود و بلافاصله بعد از ایجاد کروتین، پیام “ادامه اجرای برنامه” چاپ میشود.
سپس با استفاده از Thread.sleep منتظر میمانیم تا کروتین پایان یابد و سپس پیام “پایان برنامه” چاپ میشود.
با اجرای این کد، میبینید که عملیات کروتین به صورت همروند و بدون مسدود شدن ادامه اجرای برنامه به پایان میرسد. توجه داشته باشید که در زبان Kotlin، استفاده از coroutines بسیار سادهتر و قابل خواندنتر است.
Kotlin برای کار با coroutines ابزارهای متعددی را فراهم کرده است که به شما اجازه میدهد به راحتی با عملیاتهای ناهمزمان کار کنید.
برای مثال، میتوانید از قابلیت suspend functions در Kotlin استفاده کنید که به شما اجازه میدهد تا توابعی را با استفاده از کلیدواژه suspend تعریف کنید و به صورت همروند اجرا شوند.
import kotlinx.coroutines.* suspend fun doSomething() { println("شروع کروتین") delay(2000) // تاخیری را شبیهسازی میکند (در اینجا 2 ثانیه) println("پایان کروتین") } fun main() { println("شروع برنامه") CoroutineScope(Dispatchers.Default).launch { doSomething() } println("ادامه اجرای برنامه") // انتظار برای اتمام کروتین Thread.sleep(3000) // منتظر میماند تا کروتین پایان یابد (در اینجا 3 ثانیه) println("پایان برنامه") }
در این مثال، تابع doSomething با استفاده ازکلیدواژه suspend تعریف شده است. از آنجا که این تابع suspend است، میتوان آن را به صورت مستقیم در یک کروتین فراخوانی کرد. همچنین، از CoroutineScope و Dispatchers.Default استفاده میکنیم تا یک کروتین ایجاد کنیم و تابع doSomething را در آن اجرا کنیم.
با اجرای این کد نیز، خروجی مشابهی با مثال قبل خواهید داشت. با استفاده از قابلیت suspend functions، کدتان بسیار خوانا و قابل فهمتر خواهد بود.
این تنها یک مثال ساده از پیادهسازی coroutines در Kotlin است. Kotlin ابزارهای بسیاری برای کار با coroutines در اختیار شما قرار میدهد و امکانات بیشتری برای مدیریت عملیات ناهمزمان فراهم میکند.
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.