Android 图片加载导致内存占用过大的问题
来源:互联网 发布:旬牙利算法 编辑:程序博客网 时间:2024/05/16 10:54
Android经常出现的OOM就是因为加载的图片过多没有及时回收,所以造成占用的内存过大,接下来就OOM了.下面是转载,得到的启示:不要乱设置背景图了...
-------------------------------------------------------------- 分割线 -------------------------------------------------------
android3.0默认heap size为48m,进入ddms,在ddms中“update heap”-“cause gc”,查看应用的内存使用情况,发现每进入一个activity,1-byte array(byte[], boolean[])的值总是会相应的增加,到最后一个activity的时候啥都不干,heap size已经快30m了。通过分析,1-byte array就是bitmap的占用空间,这就说明不断有新的bitmap在内存中。由于ui使用了很多图片,比如大背景图,按钮图片等等,看来是这些图片 都会存在内存中,即使当前activity已经销毁进入下一个activity,前一个activity的图片资源也没有销毁。
其中一个做法是:
用Bitmap bm = BitmapFactory.decodeResource(this.getResources(), R.drawable.splash);
BitmapDrawable bd = new BitmapDrawable(this.getResources(), bm);
mBtn.setBackgroundDrawable(bd);
来代替mBtn.setBackgroundResource(R.drawable.splash)。
销毁的时候使用:
BitmapDrawable bd = (BitmapDrawable)mBtn.getBackground();
mBtn.setBackgroundResource(0);//别忘了把背景设为null,避免onDraw刷新背景时候出现used a recycled bitmap错误
bd.setCallback(null);
bd.getBitmap().recycle();
在“update heap”-“cause gc”,点击1-byte array(byte[], boolean[])行后,在Heap表里,查看图片内存的占用比例直方图,发现一些图片的占用内存居然高达10M(特别是在三星galaxy note运行时),但项目里最大的原始图片也才1M多,很明显程序的写法有问题。最后,发现,在资源文件里,设置android:background为某些图片时,导致内存大增。但如果把设置背景的步骤写在JAVA代码里,问题便解决了。
JAVA代码:
testview.setBackgroundResource(R.drawable.testview_bg);//内存还是会增大两三倍
结合上面的另一种作法,改用setBackgroundDrawable,如:
Bitmap bitmap = null;
内存问题解决。
但是,setBackgroundResource和setBackgroundDrawable的差别为什么这么大,待研究。。。
- Android 图片加载导致内存占用过大的问题
- Android---加载图片 解决图片过大导致的内存溢出问题
- Android 图片加载,内存过大问题
- android图片占用计算&导致内存溢出的问题
- 图片轮播器占用内存过大问题的解决办法
- 【转载】SQL Server占用内存过大导致服务器死机问题的解决
- hiveserver 占用内存过大的问题
- android开发游记:位图压缩技巧与方法总结,解决加载大图内存占用过大问题
- elasticsearch字段过大导致的内存问题
- 安卓加载图片过大而导致OOM内存溢出的解决方法(巨坑....)
- Redis导致服务器内存占用过大
- 1-byte array(byte[], boolean[])图片导致的内存过大
- Android优化图片加载所占用的内存
- firefox和thunderbird的内存占用过大问题
- 飞信内存占用过大问题的临时解决方案
- 延迟加载解决offset过大导致的分页性能问题
- Android异步加载图片,解决图片过大OOM问题
- Android内存溢出整理总结 OOM(Out Of Memory) 加载的图片太多或图片过大时经常出现OOM问题
- 分拣系统概况
- sharepoint 2010 如何给文档库或自定义列表添加评论功能
- Particle effect-2 Custom define properties
- Android摄像头调试分析
- C语言typedef函数体验
- Android 图片加载导致内存占用过大的问题
- read 与 fread 的区别的误解
- LLC算法coding与pooling解析
- SDK编程笔记 — 计时器篇两个计时器API的讨论
- ubuntu安装光盘修复grub-rescue引导失败问题
- Java web项目中读取配置文件
- java 传参数时 类型后跟 3个点 “...” 的意义
- C/C++中volatile关键字详解
- 用myeclipse从数据库生成hibernate的entity类