1、图片墙的优化处理。
阐述应用场景,在开发运用中,我们经常会碰到图片墙的运用。
用得比较多的就是一些购物软件,摆上一墙的图片。
遇到的问题:
我们在现实中容易遇到,图片太多,内存不足,导致系统出现崩溃(OOM)。
原因:
由于Android 对图片内存做了8M的内存限制(不同机型内存限制不相同,有的有16M),
如果图片的内存BITMAP 超出了8M,系统就提示内存溢出OOM(out of memory),程序就会崩溃。
google之所以这么做限制主要是因为太大图片内存消耗是不科学的,对系统的内存资源占据太多会影响系统和其他的APP和自己APP的稳定性的操作流畅度。
所以这个8M估计是google从理论和实践的过程中摸索出来的综合值。
场景:
如图我们在Android中加载一大块的瀑布流照片墙,假设这些图片一张有1M,那么一个屏幕下来9张,也就是9M了,那么在我们进入这个照片墙的时候系统马上崩溃(OOM)。
如何有效的防止这种状况出现呢?(重要)
1、对单个图片做压缩处理,为了保证图片的不变形,最好做等比例压缩,使一个屏幕的显示的时候不会出现OOM。
2、在快熟滑动页面的时候,不对图片做加载,不写入内存中,用开源库ImageLoader可以实现。
3、用LruCache 来管理内存防止内存溢出,(脑补)
LruCache是用一个 强引用的 linkedHashMap来管理缓存,
用户可以为 LruCache分配一个内存大小区域,如果我们加入到这个LruCache的bitmap 的Size超过了,LruCache 的maxSize,LruCache就会对 memoryCache 队列中的最先进来的一个进行回收,这样就有效的防止了内存溢出的发生。
当然除了以上的这些处理方式,
你也可以应用一些框架 xutil,ImageLoader,volley,或者前不久facebook开源的一款fresco(据说也很吊)