fragmentation در بازار بزرگ اندروید

این درس به بررسی جامع Android Market Fragmentation میپردازد؛ به نحوی که چالشهای ناشی از تنوع وسیع دستگاههای اندرویدی از نظر اندازه، رزولوشن و نسخههای مختلف سیستم عامل را مورد تحلیل قرار میدهد. در این محتوا، جنبههای کلیدی مربوط به طراحی UI و بهینهسازی اپلیکیشن برای multiple screens مورد بررسی قرار گرفته و تکنیکهایی مانند استفاده از layout qualifiers و resource management به عنوان راهکارهای تخصصی معرفی شدهاند. هدف اصلی، ارائه راهنماییهای کاربردی به متخصصان برای ایجاد تجربه کاربری یکپارچه و ریسپانسیو در محیطی است که Fragmentation به عنوان یک ویژگی ذاتی بازار اندروید مطرح میشود.
قبل از شروع بحث فرگمنت ها اجازه بدید یک سناریو براتون شرح بدم. سناریو ام این هست که من میخام یک اپلیکیشن برای یک وب سایت آموزشی طراحی کنم. خب با این تفاسیر در دستگاه های کوچیک اندرویدی در صفحه اول وقتی روی درس مد نظرم می زنم به اکتیویتی دوم برده میشم و اونجا است که ویدئو رو مشاهده می کنم، ولی در تبلت ها که فضای بیشتری دارم بهتر هست نصف صفحه دستگاه رو به لیست درس های دوره مد نظرم تخصیص بدم و از نیمه دیگه صفحه طوری استفاده کنم که کاربر بعد از زدن بر روی هر درس مد نظرش از نیمه اول؛ ویدئو رو بصورت آنلاین در نیمه دوم مشاهده کنه و اینطوری بگم که با این اپلیکیشن در تبلت ها همزمان یجورایی دو تا اکتیویتی دارم ولی در دستگاه های اندرویدی کوچکتر یک اکتیویتی و با تشبیه ای از همین سناریو بود که گوگل تصمیم گرفت فرگمنت ها رو از نسخه های خاصی از سیستم عامل اندروید به بعد منتشر کنه.
یکی از بزرگترین چالش ها برای توسعه دهندگان اندروید چند بخشی کردن صفحه در دستگاه اندرویدی مختلف موجود در بازار هستش. که در واقع به هرکدوم از این بخش ها یا تکه ها یک فرگمنت میگند. اندروید حدودا از سال 2008 وارد عرصه شده و به معنای واقعی کلمه هزاران مدل دستگاه اندرویدی مختلف تا الان در دست کاربران هست. این خیلی مهم هست که بدونید پیاده سازی برنامه هاتون بسته به نسخه های مختلف سیستم عامل های توزیع شده و صفحه های نمایش دستگاه ها متفاوت خواهد بود. اولین جنبه مهم اندازه مارکتی است که سیستم عامل های متفاوت تونستن برای خودشون بدست بیارن پس نوع سیستم عامل در ساخت یک اپلیکیشن خیلی مهم هست. در دنیای دستگاه های اپل مثل آیفون ها و آیپدها، ارتقاء سیستم عامل توسط کاربران نسبتا سریع و به طور گسترده ای تعمیم پیدا میکنه چون اپلیکیشن اونها همیشه توسط یک فروشنده یکسان که خود شرکت اپل هست انجام میشه و ارتقاها هم از پل همون شرکت ارسال میشن.
ولی در مورد اندروید اینطور نیست، تولیدکننده های دستگاه های اندرویدی تعدادشون زیاد هست. در بسیاری موارد، دارندگان تلفن های همراه، برای توسعه سیستم عامل هاشون دستگاه هاشون رو به روز رسانی میکنن. ولی این همیشه برای این شرکت ها در اولویت اول قرار نداره. نتیجه اینکه در هر زمان تعداد قابل توجهی از دستگاه ها مورد استفاده کاربران هستن که طیف وسیعی از اونها از نسخه های سیستم عامل های قدیمی استفاده میکنن. میتونید از طریق وب پیج developer.android.com/about/dashboards بفهمید که کدوم نسخه های اندروید بیشترین استفاده رو در حال حاضر دارن.
در نوامبر 2015 درست بعد از ریلیز اندروید 6 یا مارشمالو، می بینیم که کمتر از 5 درصد دستگاه های در دسترس Google Play Store هنوز دارند از اندروید 2.2 یا 2.3 استفاده میکنن. بیشترین سهم دستگاه های اندرویدی از اندروید 4.4 یا کیت کت استفاده میکنن. ولی هنوز تعداد زیادی از دستگاه های قدیمیتر هستن که ممکن هست بخوایید اونها رو در برنامه هاتون ساپورت کنید. این تصویری که می بینید مجموعه ای تقریبا کامل از دستگاه های اندرویدی هستن، از اندروید 2.3 می بینید تا اندروید 6 یا مارشمالو.
این تصویر Motorola Droid 2 هستش، که در حال حاضر اندروید 2.3 یا نان زنجبیلی رو داره. که یک کیبورد فیزیکی هست کشویی هم داره و یک نوع قدیمی هست سیمکارت رو هم ساپورت می کنه. ولی با این تفاسیر هنوز هم Motorola Droid 2 جز تلفن های خوب محسوب میشه، و هنوز در شبکه ورایزون شمال امریکا پشتیبانی میشه و کار میکنه. بد نیست حالا که در خلال یک آموزش پیشرفته اندروید نویسی هستید بدونید که ورایزون یک شرکت مخابرات امریکایی هست که درصد قابل توجهی از پهنای باند جهانی اینترنت رو تامین میکنه. بقیه دستگاه هایی که در این اسلایدها می بینید از اندروید 4 به بالا هستن. بدونید که از اندروید 4 به بعد اندروید مدرن در نظر گرفته میشن و بسیاری از توسعه دهنده ها فقط از این نسخه به بعد رو ساپورت میکنن. برای نشون دادن تبلت ها هم من از تصاویر نسل اول Nexus 7 و Nexus 9 توی اسلایدم استفاده کردم.
تلفن های مختلفی رو می بینید، شامل Nexus 4، که دارای نسخه Jelly Bean یا آبنبات ژله ای، یک Nexus 5 با نسخه آبنبات چوبی یا Lollipop، یک Nexus 6، یکی از بزرگترین گوشی های اندرویدی که تاکنون ساخته شده، و تلفنی با آخرین ورژن اخیر با اندروید 6 یا مارشمالو. Nexus 5X و 6P رو می بینید که هر دوی اینها یک اسکنر اثر انگشت پشتشون دارن. من در طول آموزش هام میخوام از دستگاه های Nexus استفاده کنم چون اونها برای توسعه دهنده ها طراحی شدن. به راحتی میشه bootloaderهاشون رو باز کرد و نسخه های مختلف اندروید رو روشون نصب کرد.
البته اینهایی که دیدیم بخش کوچکی از تولیدات مارکت های مختلف اندروید رو در بازار حاضر ارائه میکنن بنابراین پیشنهاد میدم وقتی خواستید بطور جدی برنامه تون رو تست کنید یعنی قبل از ریلیز برنامه ای که ساختید بهتر هست بیاید و اون رو روی دستگاه های دیگه هم تستش کنید. مثلا روی دستگاه های Samsung، HTC، Motorola و دستگاه های دیگه. من تست برنامه ام رو روی دستگاه های واقعی و شبیه ساز های اندرویدی انجام میدم. حالا که با این تنوع بالای ورژن ها و صفحه نمایش های موجود در بازار اندورید آشنا شدید درادامه این فصل هم چند تا روش پرکاربرد برای مدیریت فرگمنت ها رو براتون شرح میدم شامل چگونگی ساخت لایوت های متناوب و منابعی برای سایزهای مختلف صفحه نمایش و با این پیش زمینه در کارمون پیش میریم.
و چگونگی ساخت تصاویر با سایزها و رزولوشن های مختلف برای صفحه های نمایش با ظرفیت های پیکسل مختلف رو هم بهتون نشون میدم. ولی فعلا لازم دونستم یک سری توضیحات رو پیرامون فرگمنت ها در اختیارتون قرار بدم تا در هنگام ریلیز برنامه های اندرویدی تون با یک دید بازتری اقدام کنید.
اول بد نیست یکمی در مورد فواید استفاده از فرگمنتها بدونید و من 3 تا از مهمترین فوایدشون رو به صمع تون می رسونم:
خب؛ سر و کار داشتن با دستگاههایی با ابعاد ظاهری متفاوت؛ همونطوری که چند لحظه پیش دیدیم این نیاز رو بوجود میاره که بیایم و از فرگمنت ها استفاده کنیم.
به عنوان اولین کاربرد :چون کلاس Activity به عنوان کلاس اصلی رابط کاربری در اپلیکیشن اندرویدی ما هستش؛ پس. این کلاس بسیاری از کارهای نمایش، مدیریت چرخه حیاط و … رو بر عهده داره.
قرار دادن تمام این بارها بر دوش کلاس Activity باعث بوجود اومدن مشکلاتی در برخورد با دستگاههای مختلف (از نظر ابعاد صفحه نمایش شون) میشه.
به عنوان دومین کاربرد پاس دادن داده بین فرمهای اپلیکیشن هم میتونه یکی از فواید استفاده از فرگمنت ها باشه.
تا اینجای کار دیگه می دونید که هر صفحه از اپلیکیشن متعلق به یک Activity هستش. این باعث بوجود آمدن چالشهایی در انتقال و پاس دادن دادهها بین فرمها میشه، زیرا که Android Intent mechanism اجازه پاس دادن نوع دادهای مرجع (شی یا object) رو بطور مستقیم بین Activityها نمیده. در عوض شی باید در دسترسی عمومی قرار بگیره.
ما می تونیم با ایجاد هر فرم به صورت یک fragment جداگانه از این دردسر پاس دادن دادهها و شیها بطور کلی خلاص بشیم.fragment ها همیشه در داخل یک Activity مشخص وجود دارن و Activity به اونها و محتویات اونها دسترسی داره. با ذخیره اطلاعات مورد نظر در هر Activity هر fragment که برای هر صفحه برنامه ایجاد شده به تمام دادههای اون Activity به راحتی دسترسی پیدا میکنه یعنی دیگه نیاز به پاس دادن دادهها و شیها به یک Activity دوم رو نداریم.
و به عنوان یک کاربرد دیگه یعنی سومین کاربرد فرگمنت ها میشه به توانایی اونها در ساختار بخشیدن به رابط کاربری اشاره کرد
بد نیست بدونید دو تا از رایج ترین ابزارهایی که برای ساختار بخشیدن به صفحات برنامه اندرویدی استفاده میشن، بهره بردن از تب ها و لیست های کشویی هستش. تبها در هنگامی که تعداد کمی فرم داشته باشیم کاربرد دارن و لیستهای کشویی زمانی که فرمها زیاد و مختلف داریم؛ میتونن پر کاربرد و عالی محسوب بشن، که بعنوان مثال؛ در برنامه ایمیل؛ استفاده از لیست کشویی در برنامه؛ اینکار رو برامون انجام میده، و اینجاست که فرگمنت ها می تونن بیان بشن.
خب؛ برخی دیگه از ویژگیهایfragment ها رو اگه بخام بطور خلاصه براتون بگم و بحثم رو جمع کنم این هست که:
هر fragment دارای لایوت، رفتار و چرخه عمر مخصوص به خودش هست.
و اینکه شما میتوانید یک fragment رو در یک Activity حذف یا اضافه کنید در حالی که Activity در حال اجرا باشه.
یا یک ویژگی اش اینه که شما میتوانید از چند fragment برای ساختن یک Activity استفاده کنید تا یک رابط کاربری چند تکه با functionality بالا داشته باشید.
و اینکه یک fragment می تونه در چند Activity استفاده بشه.
این رو هم بدونید که چرخه عمر هر fragment وابسته به Activity میزبان هستش.
و بعنوان یک ویژگی هنگامی که یک Activity متوقف میشه تمامfragment های قابل دسترس در اون Activity نیز متوقف میشن.
و رفتارهای fragment ها می تونن به هیچ یک از اجزا رابط کاربری وابسته نباشن.
و در نهایت اینکهFragment ها از API 11 به بعد قابل دسترس هستند.