一、Bitmap的recycle问题
虽然Android有自己的垃圾回收机制,对于是不是要我们自己调用recycle,还的看情况而定。如果只是使用少量的几张图片,回收与否关系不大。可是若有大量bitmap需要垃圾回收处理,那必然垃圾回收需要做的次数就更多也发生地更频繁,会对系统资源造成负荷。所以,这个时候还是自己试用recycle来释放的比较好。
如何去使用recycle()方法和何时试用recycle()都是值得考虑的问题。否侧,极易出现下面的异常:
- 05-15 08:31:00.117: E/AndroidRuntime(513): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@44c093b8
java运行时异常:试图使用一个已经回收了的图片
只有当你确认你不会在使用这个bitmap的时候,就可以选择调用recycle()方法释放它。
今天在做个小测试的时候,就因为recycle()的调用出现了异常。原因是:
在xml文件中,ImageView有两个方法来设置一张显示的图片:
- android:background="@drawable/aa"
- android:src="@drawable/aa"
刚开始,我使用background,然后在程序中,这样设置
- // 获得ImageView当前显示的图片
- Bitmap bitmap1 = ((BitmapDrawable) imageView.getBackground()).getBitmap();
- Bitmap bitmap2 = Bitmap.createBitmap(bitmap1, 0, 0, bitmap1.getWidth(),
- bitmap1.getHeight(), matrix, true);
- // 如果图片还没有回收,强制回收
- if (!bitmap1.isRecycled()) {
- bitmap1.recycle();
- }
- // 根据原始位图和Matrix创建新的图片
- imageView.setImageBitmap(bitmap2);
因为imageView.setImageBitmap()方法设置的是对应的src的图片,而不是background。而我却把background的图片给回收了。这样,就导致了异常的发生。
所以修改成如下的代码,去调用setBackGround()方法
- // 获得ImageView当前显示的图片
- Bitmap bitmap1 = ((BitmapDrawable) imageView.getBackground()).getBitmap();
- Bitmap bitmap2 = Bitmap.createBitmap(bitmap1, 0, 0, bitmap1.getWidth(),
- bitmap1.getHeight(), matrix, true);
- // 如果图片还没有回收,强制回收
- if (!bitmap1.isRecycled()) {
- bitmap1.recycle();
- }
- // 根据原始位图和Matrix创建新的图片
- //imageView.setImageBitmap(bitmap2);
- imageView.setBackgroundDrawable(new BitmapDrawable(bitmap2));
所以,一定要注意ImageView图片的来源问题,然后在进行相应的recycle。
一、Bitmap的recycle问题相关推荐
- Android App ~ Bitmap 调用 recycle() 回收内存
Bitmap调用recycle? When? Bitmap有一个recycle方法,意思很简单,回收Bitmap的空间. Q 1: Bitmap是否有调用recycle方法的必要性? A: 嵌入式系统 ...
- BitMap的recycle问题
虽然Android有自己的垃圾回收机制,对于是不是要我们自己调用recycle,还的看情况而定.如果只是使用少量的几张图片,回收与否关系不大.可是若有大量bitmap需要垃圾回收处理,那必然垃圾回收需 ...
- Bitmap recycle()
Bitmap调用recycle? When? Bitmap有一个recycle方法.含义很easy,恢复Bitmap空间. Q 1: Bitmap有调用recycle方法的必要性? A: 嵌入式系统总 ...
- BitMap 内存使用优化
在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常.所以,对于图 ...
- 非常全面的Android Bitmap知识点梳理
在日常开发中,可以说和Bitmap低头不见抬头见,基本上每个应用都会直接或间接的用到,而这里面又涉及到大量的相关知识. 所以这里把Bitmap的常用知识做个梳理,限于经验和能力,不做太深入的分析. 1 ...
- Android Bitmap面面观
在日常开发中,可以说和Bitmap低头不见抬头见,基本上每个应用都会直接或间接的用到,而这里面又涉及到大量的相关知识. 所以这里把Bitmap的常用知识做个梳理,限于经验和能力,不做太深入的分析. 1 ...
- Android 那些你所不知道的Bitmap对象详解
我们知道Android系统分配给每个应用程序的内存是有限的,Bitmap作为消耗内存大户,我们对Bitmap的管理稍有不当就可能引发OutOfMemoryError,而Bitmap对象在不同的Andr ...
- Android之Bitmap的内存优化方案总结
在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常.所以,对于图 ...
- Android对Bitmap的内存优化
一 .简要 在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常. ...
最新文章
- 点云及三维图像处理综述
- 网络计算机统考报名网,2017年《计算机应用基础》统考试题及答案
- 台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下
- 二分法c语言代码(递归、迭代)
- Ubuntu 18.04 - 启动时停留在 start bpfilter
- React的Element的创建和render
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-2.中大型公司里面项目开发流程讲解...
- 教你如何用python获得中国气象数据网的API数据并且导入数据库(附源码)
- 经典的java角色扮演,盘点2010年十大经典角色扮演类游戏合集
- IDEA初学者 常用注解意思
- 如何在工作中设定和使用 SMART 目标
- vue项目如何真机测试
- M1 MacBook的Parellel Desktop(PD)使用问题记录
- Android 自定义view 实现点击 展示下拉选项效果
- C语言华氏温度转换为摄氏温度
- 数字化的野蛮生长需要驯服
- 线上flink任务重启报错(Hadoop问题)java.lang.NumberFormatException: For input string: “30s“
- 座右铭-激励自己的话
- JS相关笔记---DAY2(逻辑运算,判断,循环以及demo,在输出方面和C,java有很大不同!)
- 整型数组处理算法(十一)请实现一个函数:线段重叠。[风林火山]