معرفی و برسی Android Architecture Components

استاندارد

گوگل در کنفرانس I/O 2017 بعد از مدت‌ها و بعد از درخواست‌های زیاد ، یک معماری پیشنهادی برای پیاده‌سازی اپلیکیشن‌های اندرویدی ارائه داد .
همچنین گوگل یک سری کتابخانه برای استفاده از این معماری پیشنهادی معرفی کرد ، که اسم این مجموعه کتابخونه‌ها Android Architecture Components هست . البته این کتابخانه‌ها حتی وقتی شما قصد استفاده از معماری پیشنهادی گوگل رو هم نداشته باشید میتونن بسیار مفید و به درد بخور باشند .
این کتابخونه‌ها به توسعه‌دهند‌ه‌ها کمک میکنه تا به راحتی لایه‌های اپلیکیشن‌شون رو از هم جدا کنند(تقریبا) وکد‌های تمیزتری داشته باشن . در ادامه این componentهای معرفی شده رو نام میبرم و دربارشون کمی توضیح میدم  :

  • Lifecycle-Aware
  • LiveData
  • ViewModel
  • Room ORM

به خواندن ادامه دهید

معرفی Bottom navigation در متریال دیزاین

استاندارد

چند وقت قبل اندروید مدل جدیدی رو برای navigation در داخل اپلیکیشن‌ها معرفی کرد .مدلی به اسم Bottom navigation . چیزی خیلی شبیه به  مدل تب‌هایی( Tabs ) که از قبل در اندروید موجود بود ، ولی خیلی نزدیک‌تر به چیزی که توی IOS دیده بودیم  .bottom_nav توی این مدل تب‌ها از بالا به پایین صفحه منتقل شدند و کمی هم باید و نباید‌های جدید نسبت به مدل تب‌های سابق به اونها اضافه شده .
چیزی که توی این معرفی جالبه، اینه که قبلا بیشتر توسعه دهنده‌ها از جمله خودم وقتی کسی راجع‌به قرار دادن تب‌ها در پایین صفحه باهاشون حرف میزد ، یسری دلایل کاملا منطقی میاوردن که چرا پیاده کردن این مدل خیلی ایده خوبی نیست . یکی از مهم‌ترین این دلایل وجود ۳ دکمه اساسی هست که در پایین صفحه وجود داره و با قرار دادن تب‌ در اون ناحیه امکام وقوع اتفاق پیشبینی نشده (  مثلا کاربر دستش بخوره به یک دکمه که توقع‌ شو نداشته باشه ) بالا میره . با وجود معرفی رسمی این مدل ، من شخصا هنوز هم جزو طرفدار‌های این مدل نیستم و به نظرم ایراداتی که از قبل وجود داشته ، هنوز هم وجود داره . ولی با توجه به این موضوع که حالا این مدل توی Desing pattern های اندروید اومده و خیلی از اپلیکیشن‌های پر طرفدار دارن ارزش استفاده میکنن (مثل اینستاگرام ، کافه‌بازار و … ) گفتم شاید بد نباشه که درباره‌اش بنویسم .

چیزهایی که باید برای استفاده از Bottom navigation رعایت کنیم :
۱. تعداد تب‌های نمایش داده شده باید بین ۳ تا ۵ تب‌ باشه ، در صورتی احساس میکنید که کمتر یا بیشتر از این مقدار تب خواهید داشت بهتره سراغ این مدل نرید .
۲. برخلاف تب‌های معمول‌ ( بالای صفحه ) در این مدل نباید امکان scroll کردن ما بین تب‌ها وجود داشته باشه .
۳. همینطور برخلاف شیوه قدیمی نباید امکان تغییر بین تب‌ها بدون کلیک روی اونها (کشیدن انگشت به طرفین رو ) داشته باشیم .
۴. متن‌های استفاده شده در هر تب باید تا حد امکان کوتاه باشند ، همچنین استفاه از متن‌های چند خطی به هیچ وجه توصیعه نمیشه   .
۵. رنگ متن و ایکون‌های تب‌های مختلف نباید متفاوت باشن و فقط لازمه زنگ تب انتخاب شده تغییر کنه .
۶. اندازه‌ ایکون‌های استفاده شده باید ۲۴ در ۲۴ dp باشد .
موارد بالا خلاصه‌ای از مهم‌ترین موارد ذکر شده در صفحه مربوط به Bottom navigation بود . میتونید لیست کامل اون‌ها رو در اینجا بخونید .

چطور Bottom navigation رو توی پروژمون استفاده کنیم :
خب با توجه به اینکه توی نسخه‌های ‌کتابخونه‌های support گوگل فعلا خبری از پیاده‌‌سازی این مدل نیست ، یا باید خودمون این مدل رو پیاده‌سازی کنیم ، یا بگردیم دنبال کتابخونه‌هایی که آدم‌های باحال نوشتن و منتشر کردن . از اونجایی که توی این جور کارا این آدم‌های باحال همیشه فعال هستند بعد یه سرچ کوچیک میتونید چندتا کتابخونه برای پیاده کردن این مدل پیدا کنید . دو تا از بهترین کتابخونه‌ها برای انجام این کار AHBottomNavigation و BottomBar هستند که توضیحات و نحوه استفاده از هر کدومشون رو میتونید داخل صفحه گیت‌هابشون بخونید .
تو پست بعدی یه مثال از نحوه پیاده‌سازی Bottom navigation  با استفاده از کتابخونه AHBottomNavigation خواهم نوشت .

معرفی کتابخانه Picasso همراه با مثال

استاندارد

Picasso یکی از معروف‌ترین و پرکاربردترین کتابخونه‌های اندرویدیه و همونجور که واضحه اسمش رو از نقاش اسپانیایی، پابلو پیکاسو به ارث برده . کاری این کتابخونه انجام میده، ساده‌تر کردن دانلود و cache کردن تصاویریه که  قراره تو اپلیکیشنتون ازشون استفاده کنید. به زبان دیگه بجای اینکه بخواید خودتون کدی بنویسید که به وسیله اون یک تصویر رو از سرور دریافت کنید و اگر خواستید بعد از دریافت اون رو داخل memory یا disk دستگاه‌تون chache کنید ، میتونید از ‌‌این کتابخونه استفاده کنید که این امکانات و امکانات دیگه‌ای رو در قالب یک پکیج کامل بهتون میده . در ادامه بخشی از امکانات Picasso رو  با هم برسی میکنم .

قبل از شروع هر کاری لازمه که کتابخونه رو داخل پروژه‌مون کامپایل کنیم. اینکار توسط خط زیر که به dependency های فایل gradle اضافه میکنیم انجام میشه .

  • خب بریم سر اصل مطلب ، تو ساده‌ترین حالت استفاده ما میخوایم یک تصویر رو از یک url دریافت کنیم و اون رو توی یک ImageView که از قبل ساختیم نشون بدیم

متد Load به عنوان ورودی هم url فایل توی سرور و هم url فایل درون گوشی رو قبول میکنه همچنین اگه تصویرتون توی resoruce پروژتون باشه میتونید id اون رو به عنوان ورودی به تابع load بفرستید .

  • اگر خواستید تصویر دانلود شده رو جایی خارج از ImageView ست کنید یا به طور کلی به bitmap دریافت شده توسط Picasso دسترسی داشته باشید می‌تونید مثل کد زیر عمل کنید .

  • به وسیله ست کردن یک تصویر برای متد ()placeHolder میتونید قبل از load شدن تصویر اصلی یک تصویر پیش فرض رو نشون بدین ، همینطور مثل متد ()placeHolder به وسیله متد ()error میشه در صورت بروز مشکل در روند دریافت تصویر یک تصویر متناسب رو نشون بدین .
  • تغییر اندازه و شکل تصویر به شکل دلخواهمون برای این کار خود Picasso توابعی رو در اختارمون گذاشته ، مثل ()ceneterCrop() , centerInside() , fit() , resize . که به وسیله اونها میتونیم شکل نمایش تصویر رو مشخص کنیم . مثلا تابع fit تصویر رو به اندازه‌ی ظرفی که قراره تصویرمون توی اون نشون داده بشه میکنه . همچنین علاوه بر موارد بالا شما میتونید کلاس Transformation دلخواه خودتون رو بسازید و تصویرتون رو به شکل‌های دلخواهتون تغییر بدین ، مثلا دو کلاس زیر رو میتونید برای گرد کردن تصویر و گرد کردن لبه‌های تصویر استفاده کنید .
    Screen Shot 2016-05-06 at 2.52.59 PM

تا اینجای کار بیشتر کارهای اصلیی رو که میشه با این کتابخونه انجام داد رو باهم برسی کردیم . اگه میخواین اطلاعات بیشتری راجع‌به این کتابخونه بدست بیارید پیشنهاد میکنم یه نگاهی به صفحه‌شون بندازید .
همینطور منم توی پست بعدی کمی راجع‌به چگونگی بهبود و کم کردن میزان مصرف memory توسط Picasso خواهم نوشت .

کتابخونه‌ای برای اضافه کردن صفحه دریافت رمز عبور در اندروید

استاندارد

sample

این کتابخونه بر پایه این پست که قبلا نوشته بودم نوشته شده .
برای استفاده ازش بعد از import کردنش توی پروژتون فقط کافی که یه کلاسی که از Application ارث میبره بسازید و اون رو توی AndroidManifest تون ست کنید . و داخل متد ()onCreate کلاستون کد (("registerActivityLifecycleCallbacks(new MyLifecycleHandler("1234 رو قرار بدید . این کد رفت آمدهای کاربر به داخل و خارج برنامه رو برسی میکنه و با توجه به اون در صورت نیاز کاربر رو به صفحه دریافت رمز عبور میفرسته .

توی این کتابخونه یک Activity پیش فرض برای گرفتن رمزعبور از کاربر وجود داره که برای استفاده ازش فقط کافیه که رمزعبوری که کاربر باید وارد کنه رو به Constructor کلاس MyLifecycleHandler بفرستید ، همینطور درصورت نیاز به تغییر متن‌هایی که در صفحه‌ی دریافت رمزعبور به کاربر نشون داده میشه میتونید از Constructor زیر استفاده کنید .

 MyLifecycleHandler (String password , String enterPassCodeTitle , String wrongPassCodeText , String submitButtonText ) .

اگه هم خواستید میتونید کاملا برای خودتون یه Activity دلخواه بسازید و Intent ای که قراره به کمکش اون Activity نمایش داده بشه رو به عنوان پارامتر به Constructor کلاس MyLifecycleHandler  بفرستید .

پنج تا از بهترین کتابخونه‌هایی که تو توسعه اندروید باید حتما بشناسیم

استاندارد

همونطور که میدونید تو چند سال اخیر شاهد رشد روزافزون استفاده از تلفن‌های هوشمند بین مردم بودیم که این موضوع باعث افزایش تقاضا و به تبع اون افزایش تولید اپلیکیشن‌های این پلتفورم شده . محبوب‌ترین و پرکاربرترین سیستم‌عامل مورد استفاده توی گوشیهای هوشمند اندروید هست .چیزی که این محبوبیت و تعداد زیاد دولوپررهای اندروید به همراه داشته، بوجود اومدن و توسعه تعداد زیادی کتابخونه‌ متن باز بوده(که اتفاق خیلی جذابی هم هست :دی) ،البته این وسط نباید از نقش استفاده از زبان جاوا برای توسعه اپلیکیشن‌های اندرویدی هم چشم پوشی کنیم .

خوبی و بدیهای استفاده از کتابخونه‌ها رو هممون میدونمیم. و اینکه استفاده از کتابخونه‌ها خیلی وقتا باعث افزایش سرعت تو کارهامون میشن و ما میتونیم تمرکزمون رو بجای انجام کارهای غیر اصلی کاملا متوجه کارهای اصلی اپلیکیشنمون بکنیم .

من اینجا میخوام ۵ تا از پر کاربردترین کتابخونه‌های اندرویدی رو براتون بنویسم که میتونند توی برنامه نویسی اندروید خیلی به ما کمک کنند و زندگی رو واسمون شیرین‌تر بکنن  .

01082013AndroidSupportLibrary

GSON .۱

gson کتابخونه‌ای هست که توسط google معرفی شده و به شما این امکان رو میده که به راحتی موجودیت‌های جاوایی خودتون رو به json تبدیل کنید و بالعکس .
اگه توی اپلیکیشنتون درگیر کار با Api ها باشید حتما gson خیلی به کارتون میاد .

همچنین این کتابخونه dependency خیلی از کتابخونه‌های دیگه‌ای هست که شاید استفاده میکنید .

 

RETROFIT

خود توسعه دهندهاش راجع به اون میگن: با retrofit شما میتونید REST API هاتون رو تبدیل به Java interface بکنید .

یکی از راه حل‌های بسیار خوب برای مرتب و تمیز کردن فراخوانی متدهای API ها استفاده از retrofit هست . retrofit به ما اجازه میده که با استفاده از annotation ها بتونیم نوع متدهای مورد استفاده و url هرکدوم رو مشخص کنیم و body مربوط به requestهامون و پارامترهای مربوط به Query رو خیلی راحت اضافه کنیم . همینطور خیلی ساده میتونیم به request مون header اضافه کنیم . همه این امکانات باعث میشه کدهامون خیلی تمیزتر و خواناتر بشن که خیلی نکته مهمی هم هست .

 

 

SUGAR ORM

sugerOrm یه ORM مخصوص اندروید هست ، همونطور که میدونید ORM مخفف Object-relational mapping هست و همونطور که از اسمش معلومه، کاری که orm انجام میده اینکه object های ما رو به نوع داده‌ای قابل ذخیره تو Relational Databaseها تبدیل میکنه و بلعکس . با استفاده از orm میتونیم کارهایی که با استفاده از دستورات طولانی sql انجام میشند رو خیلی ساده انجام بدیم . کد زیر رو در نظر بگیرید .

همونطور که میبینید با ORM میتویند خیلی ساده‌تر عملیات create, read, update و delete رو انجام بدید .

 

PICASSO

Picasso رو هم که حتما باهاش اشنا هستید . این کتابخونه امکان دانلود تصاویر و cache کردن اونها روی memory و دیسک رو میده . همچنین به شما امکانتی مثل resize کردن، برش و امکان تایین فرمت ذخیره سازی هر کدوم از پیکسل‌ها توی حافظه ( ALPHA_8  ARGB_4444 , RGB_565 )و … رو به شما میده که به واسطه اونها میتونید حجم مصرفی memory توسط اپلیکیشنتون رو کاهش بدین .

 

EVENTBUS

این کتابخونه قراره برقراری ارتباط بین بخش‌های مختلف اپلیکیشن رو برای ما ساده‌تر کنه. فرض کنید که میخواید یه متغیری رو از Activity تون به یه سرویس که در حال اجرا هست بفرستید یا یه ارتباط ساده بین fragmentهای موجود تو برناممون ایجاد کنیم. تو مثال پایین وقتی اتصال اینترنت قطع میشه به وسیله eventbus میتونیم هر activity رو که میخوایم از این موضوع باخبر کنیم .

 

همه کتابخونه‌هایی که تو بالا معرفی شد، متن باز هستند و شما میتونید کد مربوط به هرکدوم رو بخونید .