PDA

View Full Version : مصرف زیاد رم و طول کشیدن لود شدن Bitmap



shs1377
جمعه 01 اسفند 1393, 12:47 عصر
سلام دوستان من یک سری عکس دارم که در sdcard قرار دارن حالا میخوام اون ها رو با Bitmap فراخوانی بکنم ولی اجرای این Bitmap حدود 2 ثانیه طول میکشه و رم زیادی رو اشغال میکنه در ضمن عکس هایی هم که لود میکنه حجمشون حدود 1.2 مگابایت است لطفا راهنمایی بکنید که چیکارش بکنم این کدش هست :

final File[] files = new File[] { new File(Environment.getExternalStorageDirectory(), "/folder/1.png"),
new File(Environment.getExternalStorageDirectory(), "/folder/2.png"),
new File(Environment.getExternalStorageDirectory(), "/folder/3.png"),
new File(Environment.getExternalStorageDirectory(), "/folder/4.png"),
new File(Environment.getExternalStorageDirectory(), "/folder/5.png"),
new File(Environment.getExternalStorageDirectory(), "/folder/6.png")


};






---------------------------------------------------------------------








Bitmap b = BitmapFactory.decodeFile(files[position].getPath());

storm_saeed
جمعه 01 اسفند 1393, 13:00 عصر
از LruCache استفاده کنید .
مثلا موقعی که برنامه باز میشه اینا رو کش مموری بریزید
یه مورد دیگه هم که باید بهش توجه کنید اینه که بیت مپ هاتون رو اسکیل کنید مثلا فرض کنید عکساتون سایزش 1000x1000 هست و میخواید تو یه imageview بزارید که مثلا ماکزیمم 200x200 پیکسل نیازه . پس بهتره بیت مپ به 200x200 ریسایز شه و در مموری قرار بگیره

badname
جمعه 01 اسفند 1393, 16:08 عصر
من از
LruCache استفاده کردم ، وقتی تعداد عکسا بالا میرفت کرش میکرد ، فعلا از universsal image loader استفاده کردم ، بهتر جواب داد

storm_saeed
جمعه 01 اسفند 1393, 18:40 عصر
احتمالا LRU cache تون مشکلی داره
این لینکو ببینید خیلی خوبه
http://developer.android.com/training/displaying-bitmaps/index.html

shs1377
جمعه 01 اسفند 1393, 22:01 عصر
دوستان ممنونم ازتون

ولی باید بگم که من اصلا عکس ها رو نمایش نمیدم اون ها رو والپیپر میکنم چرا انقدر طول میبره این لود شدن Bitmap؟

#root#
شنبه 02 اسفند 1393, 06:52 صبح
توی دوره آموزشی موسسه Udacity یادمه گفتن موقع کار بار با شبکه ، پایگاه داده و Bitmap از ترد(Thread) مجزا استفاده بشه.

sds1920
شنبه 02 اسفند 1393, 13:43 عصر
اگر شما فرضا یک عکسی حدود 700 کیلوبایت حجمش باشه و بخوایید اون رو Bitmap کنید چیزی حدود 7MB از رم رو اشغال می کنه که مقدار زیادیه. من خودم از دوتا روش با هم استفاده می کنم.
1) عکس رو به اندازه ای که صفحه گوشی باشه لود می کنم
2)برای اینکه عکس ها رو cache کنم به جای اینکه Bitmap رو نگه دارم عکس ره با استفاده از کلاس ByteArrayOutputStream به بایت تبدیل می کنم و نگه می دارم و هر وقت نیاز شد بایت ها رو به Bitmap تبدیل می کنم.اینطوری شدیدا حجم اشغالی رم کاهش پیدا می کنه