《初次使用viewpager,笔记,即左右滑动效果》后记,关于Bitmap与内存

原创
2015/03/20 22:55
阅读数 16

在上一管博客中写到使用viewpager实现左右滑动:http://my.oschina.net/u/1392566/blog/387084


在之后对代码重构时发了一个问题:

     在重构代码前。我用了两张无经过压缩的体积为16m的PNG图片,重构时由于造成APK体积过大,我转换为jgp格式,体积为3M一张,图片转换前后的像素大小不变,紧紧是转换了格式,然后问题就出现了,我在使用PNG的时候,应用只是比较卡,但两张图片还是能够正常加载,但换成JPG后,反而在加载第二张图的时候就OOM,这个问题让我很疑惑。

解惑:

      在经过一轮的百度 google后,我找到了这编文章:       URL:http://blog.csdn.net/kaitiren/article/details/8054856  

      这让我了解到了,原来当一个文件的byte[]转换为Bitmap的时候,这个Bitmap的内存占用大小是跟原文件的大小是无关的,因为它是根据像素来分配内存的,而且因为PNG和JPG的各自的特性,PNG的流在直接转换为Bitmap的时候不需要消耗额外的资源,而jpg在转换为Bitmap的时候,需要先进行纹理转换,这样在转换的过程中就比PNG多用了些临时性的内存,导致 在加载第二个jpg图过程中OOM了。

PS:当时如果PNG的体积再大一点,可能就也会引起OOM,也许我就没机会发现这一个事情,说来还真是挺巧的。

最后说一些关于Bitmap的事:

  1. Bitmap创建后在默认状态下是不可二次绘制的,这与一个属性inMutable有关。
  2. Bitmap对象在空引用后,可被Jvm回收,但是处理Bitmap对象的C对象中还有保留着一份缓存,这个是jvm不可自动回收的,所以养成好习惯是,当Bitmap对象将要被丢弃时,先调用BitmapAPI提供的recycle方法进行清理。


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部