محمد صادق مهرافزون
محمد صادق مهرافزون
خواندن ۳ دقیقه·۸ ماه پیش

نحوه رسیدگی به برقراری ارتباط با API های متعدد توسط Kotlin Coroutine

من با فرض اینکه شما در مورد تعریف کوروتین کاتلین، موارد استفاده ساده، مثال ها و... می دانید این پست را می نویسم .

بیایید به چند موقعیت واقعی مبتنی بر اندروید یا موارد استفاده از آن بپردازیم. اول اجازه دهید در مورد محدوده چرخه حیات بگویم.

سوال 1 :

چه اتفاقی می‌افتد اگر ما چیزی را در محدوده چرخه حیات معمولی ( lifecycle scope ) بدون ذکر Dispatcher اجرا کنیم؟

اولین چیزی که به ذهن من می رسد این است که آیا در این کد Main Thread ما اجرا می شود؟


سوال 2:

اگر در Main thread اجرا شود، پس...

اگر پس از فراخوانی coroutine suspend function خارج از scope، چیزی را در TextView چاپ کنیم، چه اتفاقی می‌افتد؟

خیلی ساده است… بعد از ۲ ثانیه چاپ می‌شود، منظورم بعد از فراخوانی suspend function است زیرا هر دو در Main thread ما اتفاق می‌افتند. اما این جواب درست نیست!!!!

پاسخ درست این است که همانطور که هست چاپ می شود. منظور این است که فقط کل scope چرخه حیات را به عنوان یک دستور خط واحد حساب می کند. بدون تاخیر!

اما، وقتی یک مشکل ساده Leetcode را حل می کنیم، همیشه می بینیم که یک رشته همه کارها را خط به خط انجام می دهد درست است؟ اگر دو threads متفاوت باشد، پس بدیهی است که اشکالی ندارد!

میخوام یکم پیچده تر کنم این موضوع رو!!

حالا، باید 2 ثانیه صبر کنیم و بررسی کنیم که گزارش suspend function’s یا همان "someTask" ما در جایی چاپ می شود!یا اصلا خیر؟

من به جواب این نمیپردازم. فقط در صورتی که علاقه مند جواب هستید می توانید خروجی بگیرید.


حالا بریم برخی از موقعیت‌های رایج در مورد تماس‌های API Android و نحوه حل آن‌هایی که از Kotlin Coroutine استفاده می‌کنند را مورد بحث قرار بدیم! :)


Use Case شماره 1

ما باید دو تماس API برقرار کنیم و اولین تماس API یک Auth Token برمی گرداند. سپس با استفاده از این توکن باید API دوم را فراخوانی کنیم.

یک کلام، API دوم ما به اولین نتیجه فراخوانی API ما وابسته است.

به این شکل این موضوع رو پیاده سازی می کینم!

اما این یک مثال واقعی از برقراری تماس API با استفاده از ViewModel و الگوی MVVM نیست.

پس حالا چند کد واقعی را ببینیم.

نیازی نیست دو تماس API برقرار کنید زیرا دومی به اولی وابسته است!

شما مستقیماً تابع secondApiCall() را فراخوانی می کنید و توکن شما را دریافت می کند.

صبر می کند تا توکن auth برگردد، سپس API واقعی را با استفاده از این نشانه فراخوانی می کند.


Use Case شماره 2

باز هم، ما باید دو تماس API برقرار کنیم و این بار به هر دو نتیجه API همزمان با هم نیاز داریم. اگر فقط یک نتیجه دریافت کنیم، نمی‌توانیم آن را در رابط کاربری خود نمایش دهیم یا آداپتور RecyclerView را تنظیم کنیم.

سوال؟ به این شکل بهینه اس ؟ نه. تکمیل هر دو 4 ثانیه طول می کشد زیرا آنها یکی یکی به صورت همزمان اجرا می شوند.

ما اینجا اکنون هیچ وابستگی نداریم، پس چرا به این شکل پیاده سازی کنیم؟

بریم سراغ کد بهینه شده !

اکنون 2 ثانیه صرفه جویی کرده اید و لطفاً به یاد داشته باشید که این یک سؤال بسیار رایج برای هر مصاحبه شغلی برنامه نویس اندروید است.


ممنون که تا آخر این پست همراه من بودید ، امیدوارم براتون مفید بوده باشه 🙌🙏✌ (:

بقیه آموزش های mister developer را می توانید در تلگرام و اینستاگرام دنبال کنید!!

کانال تلگرام: mister_developerr

اینستاگرام: mister_developerr

موفق و پیروز باشید




apiبرنامه نویسیandroid developmentkotlin
🟢 انتشارات روزمرگی برنامه نویسان را دنبال کنید. این انتشارات توسط وب سایت آواسام پشتیبانی میشود. https://avasam.ir
شاید از این پست‌ها خوشتان بیاید