در این مقاله خواهیم دید که Jetpack که اخیراً گوگل برای برنامه های اندرویدی توسعه داده است شامل چه قطعات و ویژگی هایی است. Jetpack در رویداد Google IO 2018 آمد و توسط جامعه توسعه دهندگان اندروید مورد توجه قرار گرفت و روز به روز در حال پیشرفت است. برای اینکه بفهمید جت پک چیست با ما همراه باشید تا با جت پک آشنا شوید.
jetpack چیست؟
بهطور ساده، Jetpack یک روش جدید برای ساخت برنامههای اندروید است اما سادهتر، بدون دردسر، آزمایشپذیر و مقیاسپذیر. یکی از مشکلاتی که توسعه دهندگان اندروید همیشه با آن مواجه بودند، ساختار پیچیده کتابخانه پشتیبانی اندروید بود. این کتابخانه در ابتدا به عنوان راهی برای تطبیق نسخه های قدیمی اندروید با ویژگی های جدید بود. به عنوان مثال، زبان طراحی متریال در نسخه آب نبات چوبی که در نسخه های پایین تر نمی تواند باشد، اما کتابخانه پشتیبانی به برنامه نویس اجازه می دهد که از طراحی متریال در نسخه های قبل از آب نبات چوبی نیز استفاده کند. اما برای مثال یکی از مشکلات ساختار کتابخانه پشتیبانی، نامگذاری عجیب آن بود. به عنوان مثال Support Library v13، Support Library v7، Support Library v4 !!! توسعه دهنده باید می دانست که مثلا RecyclerView در Support Library v7 و Fragment در Support Library v4 است!!! خوب،
یکی دیگر از مشکلات اندروید این بود که به دلیل تنوع گوشی های اندرویدی چه از نظر سیستم عامل و چه از نظر امکانات. توسعه دهندگان با چالش بزرگی برای کار ایمن و صحیح روی همه تلفن ها مواجه شدند. به عنوان مثال، شما یک انیمیشن را برای نمایش فعالیت خود مشخص کرده اید، اما در هر گوشی کاملاً متفاوت عمل می کند. دلیل دیگر این بود که یکپارچه سازی و کاهش پیچیدگی موضوع.
مجموعه Jetpack از چهار بخش معماری، رابط کاربری (UI)، رفتار و بنیاد تشکیل شده است.
در این مقاله در مورد مهمترین قسمت آن صحبت خواهیم کرد.
معماری
یکی از مهمترین مسائل برنامه نویسی مقیاس پذیری، خوانایی کد و تست پذیری است. این بخش بر روی این موضوعات تمرکز دارد و با استفاده از کامپوننت معماری اندروید می توانید به ویژگی هایی دست پیدا کنید که یک نرم افزار با کیفیت به آن نیاز دارد. معماری Google MVVM با قابلیت پیادهسازی آسان که مؤلفه معماری Android به شما کمک میکند پیادهسازی کنید. به طور خلاصه، MVVM نرم افزار را به ۳ لایه تقسیم می کند. View, ViewModel, Model. لایه مدل وظیفه ارائه اطلاعات به عنوان مثال دریافت اطلاعات از سرور یا پایگاه داده را بر عهده دارد، لایه View تنها وظیفه نمایش اطلاعات را بر عهده دارد و ViewModel رابط بین لایه Model و View است.
ViewModel
تابع ViewModel ارتباط بین لایه View (مثلاً Fragment شما) و لایه Model (مثلاً پایگاه داده شما) است. فرض کنید می خواهید لیستی از یادداشت ها را از پایگاه داده دریافت کنید. در این صورت نباید درخواست را مستقیماً از Fragment به پایگاه داده ارسال کنید. در عوض، ViewModel را از هر رویدادی که برای قطعه شما رخ می دهد مطلع می کنید. ViewModel تصمیم می گیرد که چه زمانی اطلاعات را از پایگاه داده بازیابی کند. به عنوان مثال، زمانی که روش قطعه onStart، لیستی از یادداشت ها را از پایگاه داده درخواست می کند و شما نتیجه را به Fragment گزارش می دهید. اما نحوه اطلاع رسانی اطلاعات به Fragment. پاسخ این سوال LiveData است.
LiveData
LiveData به سادگی یک دارنده داده است. بسته های داده ای که بین View و ViewModel قرار دارند می توانند از نوع LiveData باشند. اما مزیت آن چیست؟ بعدا خواهیم دید. در اندروید، لایه View، چه Fragment یا Activity، چرخه حیات خاص خود را دارد. این چرخه حیات بسیار مهم است زیرا درخواست و دریافت اطلاعات از Model کاملاً به چرخه عمر View وابسته است. یکی از مزایای به اصطلاح Lifecycle Aware بودن این است که. این بدان معناست که لازم نیست نگران View Lifecycle باشید، LiveData آن را هوشمندانه مدیریت می کند.
مدیر کار
این ابزار برای برنامه ریزی کارهای وقت گیر است. به عنوان مثال، با WorkManager می توانید مشخص کنید که اطلاعات پایگاه داده هر ۱۲ ساعت با سرور همراه شود. یکی از مشکلات بزرگ اندروید نبود سیستم یکپارچه و دقیق برای زمان بندی وظایف خاص بود. ابزارهای مختلفی مانند Alarm Service یا Job Scheduler وجود داشت، اما برای مثال Alarm Service دقیق نبود و فقط تا نسخه ۱۹ اندروید کار می کرد و از طرف دیگر Job Scheduler روی نسخه های پایین تر کار نمی کرد. اما با ورک منیجر دیگر چنین نگرانی وجود ندارد و تضمین می شود که در صورت رعایت شرایط کاری، کار شما به موقع انجام می شود. یکی از نکات جالب در مورد WorkManager این است که می توانید مشخص کنید که مثلاً هر ۱۲ ساعت کاربر به اینترنت متصل است اما با گوشی خود کار نمی کند. خوب، این می تواند در بسیاری از موارد مفید باشد،
صفحه بندی
در بسیاری از اپلیکیشن ها متوجه شده اید که مثلا وقتی می خواهند لیست اخبار را نمایش دهند، ۲۰ خبر اول است و زمانی که کاربر به انتهای لیست می رسد، ۲۰ خبر بعدی به دلیل افزایش سرعت اجرا است. از سفارشات، صرفه جویی در RAM و حجم داده های کاربر است. این روش Lazy Loading یا Infinite Scroll است. از این پس می توانید از کتابخانه Paging برای اجرای این سناریو استفاده کنید. مهمترین مزیت استفاده از پیجینگ، سادگی و پشتیبانی RecyclerView است.
جهت یابی
کامپوننت Navigation برای اتصال و کنترل برنامه Navigation بین قطعات است. به عنوان مثال، با استفاده از این ابزار می توانید قطعات را به صورت بصری به هم متصل کنید و تعیین کنید که از هر قطعه به کجا بروید و حتی آرگومان های مورد نیاز هر قطعه را مشخص کنید.
در سال ۲۰۱۸، گوگل از مفهوم جدیدی به نام SingleActivity رونمایی کرد و به طور رسمی آن را به عنوان جایگزینی مناسب برای روشهای گذشته مانند اپلیکیشنهای چند فعالیتی معرفی کرد. البته قبل از گوگل، اینستاگرام از این مفهوم استفاده می کرد و در واقع اپلیکیشن اینستاگرام سال هاست که SingleActivity بوده است. اما اپلیکیشن SingleActivity به چه معناست؟ یعنی اپلیکیشن باید فقط یک اکتیویتی داشته باشد و تمام صفحات با یک فرگمنت پیاده سازی شوند و این فرگمنت ها در اکتیویتی بارگذاری شوند. اما مزیت این روش و دلیل انتخاب آن یک مقاله کامل برای توضیح است.
نتیجه
به نظر من Jetpack یکی از بزرگترین پیشرفت هایی است که برنامه نویسی اندروید تاکنون به خود دیده است و این حرکت گوگل را می توان انقلابی در صنعت توسعه اپلیکیشن اندروید دانست. یکی از مهم ترین ویژگی های Jetpack این است که اجزای آن می توانند به خوبی با هم تعامل داشته باشند و به طور جداگانه به درستی کار کنند. به همین دلیل از کلمه Component در آن استفاده شده است.