پیاده سازی lazy load در اندروید

اگر برنامه‌نویس اندروید باشید احتمالا شرایطی بوده که نیاز داشتید عکسی که تو اینترنته رو داخل یک ImageView لود کنید. معمولا همچین عکسهایی داخل لیست قرار دارند و شما به ازای هر آیتم لیست باید یک یا چند عکس از اینترنت لود کنید. احتمالا تو این شرایط اولین راهی که به ذهنتون میرسه اینه که به ازای هر عکس یه ریکوئست وب بدید و عکس رو دانلود کنید و نمایش بدید. اما این قطعا بهترین راه نیست. تو این روش مسائل زیادیه که باید رعابت بشه که اگه نکنید ممکنه با مشکل‌های زیادی رو به رو شید. اگر هم همه چیز خوب بشه و عکس رو با موفقیت از سرور بگیرید، تازه دردسر سر و کله زدن با عکس و تغییر سایزش شروع میشه.

اینجاست که چرخ رو دوباره اختراع نمیکنیم و میریم سراغ کتابخونه‌های آماده‌ی اینکار. من اینجا میخوام دو تا از این چرخ‌ها که حرکت ما رو سریعتر میکنند رو معرفی کنم و با هم مقایسه کنم.

اول: Picasso

کتابخونه Picasso کار همون گروهیه (گروه؟ شرکت؟ سازمان؟ نمیدونم دقیقا چین) که کتابخونه Retrofit رو هم درست کردن. (قبلا در مورد Retrofit توضیح دادم). کار با پیکاسو خیلی خیلی سادست. مثلا برای لود کردن یه عکس از وب داخل یک ImageView تنها کافیه کد زیر رو بنویسید:

 

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

و به همین سادگی عکس داخل ImageView لود میشه. برای دانلود Picasso خط زیر رو به depedency های فایل Gradle مربوط به ماژولتون اضافه کنید:

compile 'com.squareup.picasso:picasso:2.5.2'

دوم: Glide

کار با Glide هم به همون سادگی کار با Picasso است. برای لود کردن عکسی از وب داخل ImageView باید به شیوه زیر عمل کنید:</p> <pre class="lang:default decode:true "><span class="pl-smi">Glide</span><span class="pl-k">.</span>with(<span class="pl-v">this</span>)<span class="pl-k">.</span>load(<span class="pl-s"><span class="pl-pds">"</span>http://goo.gl/gEgYUd<span class="pl-pds">"</span></span>)<span class="pl-k">.</span>into(imageView);

و برای اضافه کردنش به پروژه کد زیر رو به فایل Gradle مربوط به ماژولتون اضافه کنید:

repositories { mavenCentral() // jcenter() works as well because it pulls from Maven Central } dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support:support-v4:19.1.0' }

خب تا اینجا هر دو تا کتابخونه عملا مشابه به نظر میرسیدند و فرق خاصی با هم نداشتند. اما در واقع دوتا فرق مهم دارند. این دوتا تفاوت عبارتند از:

  • کتابخونه Glide عکسها رو بعد از اینکه resize کرد کش میکنه و این باعث میشه هربار لود کردن عکس مموری کمتری مصرف کنه. اما از طرفی هم باعث میشه از هر عکس چند کپی با سایزهای متقاوت کش بشه. در صورتی که Picasso عکسی که دانلود میکنه رو کش میکنه و برای هر بار نمایش اون رو resize میکنه. این روش در مقایسه با روش Glide رم و سی‌پی‌یو بیشتر مصرف میکنه اما مموری کمتری صرف کش کردن عکسها میشه.
  • کتابخونه‌ی Glide نمایش gif های متحرک و همینطور ویدیوهای داخل خود گوشی رو هم ساپورت میکنه، اما Picasso نمیکنه.

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

4 پاسخ به “پیاده سازی lazy load در اندروید”

  1. مهدی گفت:

    چقدر عالی که میان و تجربه های باارزش تون رو مینویسین که قطعا به درد خیلی ها میخوره که حتی اتفاقی از اینجا ممکنه رد بشن. ممنون

  2. مهدی گفت:

    سلام
    به تازگی با Fresco آشنا شدم.
    هنوز استفاده نکردم ولی از اونجایی که ماله Facebook هست، سنگ تمام گذاشته.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

android application Google I/O HomeBrew ImageMagick Material Design mobile PogressBar RecyclerView splash TEDxKish ux آموزش اندروید الوین تافلر اندروید اپلیکیشن برنامه نویسی برنامه نویسی اندروید برنامه‌نویسی برنامه‌نویسی اندروید تداکس کیش تعمیر تغییر سایز عکس با ترمینال خلاصه کتاب دانش داده دانشگاه دانشگاه ایده‌آل دزد دیتا ساینس رشته مهندسی کامپیوتر ریکامندرسیستم سیستم‌های توصیه‌گر فری‌لنس لپتاپ متریال دیزاین معرفی کتاب موج سوم نوار پیشرفت همایش هوش مصنوعی ُجزیره کیش کار کسب و کار یادگیری عمیق یادگیری ماشین