文档章节

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

某天
 某天
发布于 2015/03/20 22:55
字数 578
阅读 14
收藏 0

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


© 著作权归作者所有

某天
粉丝 2
博文 17
码字总数 8857
作品 0
佛山
程序员
私信 提问
使用ViewPage实现类launcher屏幕滑动

在去年11月份的时候,自己写过一篇launcher左右滑动的源码分析的文章,launcher修改--左右滑动屏幕切换源码追踪,今年1月份的时候,看到一份有意思的代码,又简单的解析了下代码,写成页面滑...

迷途d书童
2012/03/30
4.6K
0
android中ViewPager详解--视图滑动、界面卡等效果 (一)

这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一。利用它,我们可以做很多事情,从最简单的导航,到页面菜单...

一别经年
2014/01/21
4.7K
0
Android ViewPager使用详解

这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等...

Remix_jx
2014/10/27
278
0
Android 打造一个丝滑的自动轮播控件

现在很多的 App 都有自动轮播的 banner 界面,用于展示广告图片或者显示当前比较热门的一些活动,除了具备比较酷炫的效果之外,通过轮播的方式来减少对界面的占用,也是很赞的一个设计点。本...

developerHaoz
2018/08/08
0
0
用ViewPager实现欢迎引导页面

ViewPager需要android-support-v4.jar这个包的支持,来自google提供的一个附加包。大家搜下即可。 ViewPager主要用来组织一组数据,并且通过左右滑动的方式来展示。 现在的大多数应用都会有一...

zt1212
2012/10/15
651
1

没有更多内容

加载失败,请刷新页面

加载更多

centos7命令行和图形界面的相互切换

最近安装了centos7,发现在命令行和图形界面的相互切换命令上,与centos以往版本有很大不同。 1,centos7默认安装后,跟其他版本一样,启动默认进入图形界面; 2,在图形化桌面,右击鼠标,选...

无名氏的程序员
22分钟前
6
0
对称的二叉树

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 boolean isSymmetrical(TreeNode pRoot) { if (pRoot == null) ...

Garphy
32分钟前
3
0
快速失败 (fail-fast) 和安全失败 (fail-safe) 的区别是什么

一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。 原理:迭代器在...

Bb进阶
34分钟前
7
0
golang 数据库与JSON解析一起 用空格分割

type Stocks struct { Id string `xorm:"varchar(64) pk" json:"id"` Name string `xorm:"varchar(64)" json:"name"` StockNum str......

zdglf
38分钟前
6
0
恨天诀——第一集 第五章

天似穹庐,笼盖四野。 静静矗立的天柱峰,像一把长剑,直插云霄。山南显得格外阴冷,萧瑟。 “龙儿,何为天道?”一长一少两人默默并排而立,长者问道。 良久,少年回答:“父亲,恕孩儿驽钝...

Kerwin_zZ
44分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部