博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一、Bitmap的recycle问题
阅读量:6197 次
发布时间:2019-06-21

本文共 1535 字,大约阅读时间需要 5 分钟。

    尽管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。

转载地址:http://tdjca.baihongyu.com/

你可能感兴趣的文章
23.2. phpunit xml
查看>>
9.1 安装配置Phalcon
查看>>
IIS7集成模式~对图像服务器进行防盗链设计
查看>>
加了moment.js和中文语言包,那么其它时间控件的中文包就可以不引用
查看>>
filter()和find()的区别
查看>>
Python版求数组的最大连续区间
查看>>
C#设计模式(17)——观察者模式(Observer Pattern)
查看>>
国内FPGA市场现状与机遇
查看>>
[再寄小读者之数学篇](2015-05-01 求渐近线)
查看>>
微信帐号被封零钱怎么办?微信针对封停帐号的零钱提取出了一个流程
查看>>
外键值可为空
查看>>
读取Style符号库样式的方法
查看>>
dedecms网站迁移时记得将安装目录放空 附迁移的正确方法
查看>>
ThinkPHP 3.2 用户注册邮箱验证激活帐号
查看>>
C# 读写App.config配置文件的方法
查看>>
第 103 章 Bandwidth
查看>>
SAP S4表结构之变
查看>>
MySQL之伪列实现与实践
查看>>
重温二分查找算法
查看>>
ComponentOne 2016 年产品规划
查看>>