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

在上一管博客中写到使用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方法进行清理。


转载于:https://my.oschina.net/u/1392566/blog/389616

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值