“ما را در اینستاگرام دنبال کنید”
در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم در مورد Shared Flow در اندروید ، صحبت کنیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
توی دوره ژنرال صفر تا صد زبان Shared Flow در اندروید رو در فصل Flow کامل توضیح دادیم و همچنین توی پروژه های دیجی کالا و اسنپ فود به صورت عملی و پروژه محور از Shared Flow استفاده کردیم و بطور کامل اون رو آموزش دادیم.
در این مقاله، با Shared Flow در کتابخانه kotlinx.coroutines در Kotlin آشنا خواهیم شد. SharedFlow یک hot flow است که مقادیر ارسال شده را بین تمام مصرفکنندگانش به صورت پخش میکند. این نوع از جریان به علت وجود فعالیت مستقل از حضور مصرفکنندگان “گرم” نامیده میشود. در این مقاله، ما با نحوه استفاده از SharedFlow و مفاهیم مهم مرتبط با آن آشنا خواهیم شد.
Shared Flow یک نوع جریان است که مقادیر ارسال شده را به صورت یکسان پخش میکند، به این معنا که همه مصرفکنندگان همه مقادیر ارسال شده را دریافت میکنند.
این نوع از جریان به علت وجود فعالیت مستقل از حضور مصرفکنندگان “hot” نامیده میشود. برخلاف یک flow معمولی (مانند آنچه توسط تابع flow { … } تعریف میشود) که “cold” است و برای هر مصرفکننده به صورت مجزا شروع میشود.
یک SharedFlow هرگز به اتمام نمیرسد. فراخوانی Flow.collect بر روی یک SharedFlow به طور معمول به صورت نرمال به پایان نمیرسد، و همچنین یک coroutine که توسط تابع Flow.launchIn شروع میشود نیز هیچگاه به پایان نمیرسد.
یک مصرفکننده فعال از یک SharedFlow یک “اشتراکگذارنده” نامیده میشود.
یک مصرفکننده از یک SharedFlow میتواند لغو شود. این اتفاق معمولاً زمانی رخ میدهد که دامنهای که coroutine در آن اجرا میشود، لغو میشود.
یک مشترک در یک SharedFlow همیشه قابل لغو است و قبل از هر ارسال، بررسی میکند که آیا لغو شده است یا خیر.
در واقع SharedFlow یک hot flow است که میتواند دارای چندین مصرفکننده باشد. میتواند مقادیر را بهطور مستقل از مصرفکنندگان منتشر کند و چندین مصرفکننده میتوانند همان مقادیر را از جریان دریافت کنند.
این در مواقعی مفید است که نیاز به پخش یک مقدار به چندین مصرفکننده داشته باشید یا میخواهید چندین مشترک برای همان جریان اطلاعات داشته باشید.
این جریان مقدار اولیه ندارد و میتوانید حافظه پنهان بازیابی را تنظیم کنید تا تعداد معینی از مقادیر ارسال شده پیشین برای مصرفکنندگان جدید ذخیره شود.
MutableSharedFlow یک نوع از Flow در کاتلین است که اجازه میدهد دادهها را تولید کنید و در چندین مکان مصرف کنید. این به توسعهدهندگان امکان میدهد که دادهها را بهروز کنند و به اشتراک بگذارند، حتی در زمان اجرا.
شما میتوانید دادهها را با استفاده از `emit` ارسال کنید. به عبارت دیگر، شما میتوانید دادههای جدید را به MutableSharedFlow اضافه کنید.
برخلاف بسیاری از نوعهای دیگر Flow، شما میتوانید چندین مصرفکننده داشته باشید. هر کدام از آنها میتوانند دادهها را بهصورت همزمان مصرف کنند.
شما میتوانید MutableSharedFlow را در توابع Suspending و Non-Suspending استفاده کنید. این به شما اجازه میدهد که از آن در کدهای همزمان و غیرهمزمان استفاده کنید.
شما میتوانید خطاها و استثناءها را در MutableSharedFlow مدیریت کنید و به مصرفکنندگان ارسال کنید.
شما میتوانید بازههای زمانی برای MutableSharedFlow تعیین کنید تا دادهها را در آن مدت نگهداری کند و به مصرفکنندگان ارسال کند.
MutableSharedFlow میتواند دادههای موجود را به مصرفکنندگان جدید ارسال کند، حتی اگر آنها بعد از شروع فرآیند ارسال و دریافت آن به برنامه بپیوندند.
کلیدیترین نکته در استفاده از MutableSharedFlow این است که باید مواظبت کنید که همواره یک منبع معتبر داده در اختیار داشته باشید تا دادههای صحیح و قابل اطمینان ارسال شوند.
حساب کردن میانگین یک لیست از اعداد با استفاده از Shared Flow به شکل زیر میتواند یک مثال خوب باشد:
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking fun main() = runBlocking { // ایجاد یک Shared Flow برای ذخیره اعداد val numbersFlow = MutableSharedFlow<Int>() // تعریف یک اپراتور برای محاسبه میانگین fun calculateAverage(numbers: List<Int>): Double { return if (numbers.isNotEmpty()) { numbers.sum().toDouble() / numbers.size } else { 0.0 } } // افزودن اعداد به Shared Flow launch { for (i in 1..10) { numbersFlow.emit(i) } numbersFlow.emit(20) } // جمعآوری اعداد و محاسبه میانگین val numbersList = mutableListOf<Int>() val averageFlow = numbersFlow.asSharedFlow() launch { averageFlow.collect { number -> numbersList.add(number) val average = calculateAverage(numbersList) println("میانگین تا کنون: $average") } } }
فرض کنید میخواهیم یک برنامه ثبت نام کاربران بسازیم. در این برنامه، کاربر میبایست نام و نام خانوادگی خود را وارد کند. از Shared Flow برای مدیریت و انتقال این اطلاعات میان صفحات استفاده میکنیم.
در اینجا نمونهای از کار با Shared Flow در کاتلین به شکل زیر است:
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking data class User(val firstName: String, val lastName: String) val userFlow = MutableSharedFlow<User>() fun main() = runBlocking { val registrationJob = launch { val user = User("John", "Doe") userFlow.emit(user) } val displayJob = launch { userFlow.collect { user -> println("نام: ${user.firstName}, نام خانوادگی: ${user.lastName}") } } registrationJob.join() displayJob.join() }
در این مثال، یک User
تعریف میشود که شامل دو فیلد نام و نام خانوادگی است. یک MutableSharedFlow
به نام userFlow
ایجاد میشود که میتوانیم اطلاعات کاربر را در آن ارسال کنیم.
سپس دو وظیفه ایجاد میشود:
registrationJob
: این وظیفه یک کاربر با نام “John” و نام خانوادگی “Doe” را به userFlow
ارسال میکند.displayJob
: این وظیفه اطلاعات کاربر را از userFlow
دریافت و نمایش میدهد.با اجرای این کد، نتیجه خواهیم داشت:
نام: John, نام خانوادگی: Doe
این نمونه نشان میدهد که چگونه از Shared Flow میتوان برای ارسال و دریافت دادهها در بین مختلف قسمتهای برنامه استفاده کرد.
در این مقاله ، ما به تفصیل در مورد Shared Flow در کاتلین صحبت کردیم. SharedFlow یک hot flow است که مقدارهای منتشر شده را به همه مصرفکنندگانش به صورت یکسان پخش میکند.
این امکان را فراهم میکند که همه مصرفکنندگان همه ارزشهای منتشر شده را دریافت کنند. ما نیز در مورد نکات مهمی مانند حافظه نهان و بوفر برای افزایش کارایی و کنترل دریافت اطلاعات توضیح دادیم.
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
دوره آموزشی کاتلین پیشرفته میتواند مهارتهای شما را با بهرهگیری از ابزارها و فناوریهای مدرن…
مزیتهای کاتلین نسبت به سایر زبانهای برنامه نویسی اندروید این است که سایر زبانها، از…
بهینهسازی عملکرد اپلیکیشنهای اندروید یکی از مهمترین فاکتورهایی است که برای کاربران در دنیای امروز…
مصاحبهی استخدامی کاتلین یک فرصت برای ارزیابی مهارتها و تواناییهای یک برنامهنویس در توسعه اپلیکیشنهای…
مصاحبه استخدام زبان کاتلین یک فرصت برای ارزیابی مهارتها و تواناییهای یک برنامهنویس در توسعه…
مصاحبه استخدام کاتلین یک فرصت برای ارزیابی مهارتها و تواناییهای یک برنامهنویس در توسعه اپلیکیشنهای…