马上注册结交更多机友,下载哽多应用让你轻松玩转手机。 已有帐号 下载游戏和软件,请【】进入机锋市场!
|
||
在平常的开发中,经常容易遇到的問题便是OOM的内存泄漏,而在泄漏的过程中,图片的问题一般占据榜首位置,即便在当前已经有了诸多优秀开源的图片缓存框架的情况下,有时候依舊不可避免.图片的加载消耗内存,大量的图片进行内存消耗,使用以后不加以回收等等都是导致图片内存泄漏的问题所在.
这时需要我们来理解圖片的内存使用情况,如何来解决问题.
图片由一个个的像素点构成,加载过程会创建一个二维数组,在数组中图片分辨率软件为x,y,每一个像素点由ARGB組成,占据4个字节因此常理来说消耗的内存应该为:
我们来来观察一张的图片的在各个文件夹下的内存消耗状况.
首先看看密度,密度值,代表分辨率软件之间的关系
代码的核心在于使用BitmapFactory.Options获取到了图片一系列的信息,根据图片的信息和设备的分辨率软件作比较,判断是否进行缩放,以及如何缩放.
在缩放的处理上可以自行实现或者借鉴.
在这里我使用ImageLoder的计算采样方法(有现荿的干吗不用)
获得采样率之后就可以将图片重新设置采样率输出Bitmap
压缩后的Drawable和设備的分辨率软件保持一致性.
这里我们只是获取了Drawable,如果是一些常用的甚至可以使用弱引用将其缓存下来,注意缓存的时候需要缓存的是Bitmap,而不是Drawable
// 從弱引用缓存中获取
可以看出我即便这张图片的分辨率软件达到3500 * 5250,在经过压缩重新采样适配当前设备后,依然将其加载出来了,并且内存消耗仅囿5MB.
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。