bitmap报OOM问题

wangxudong 发布于 2012/10/16 09:20
阅读 1K+
收藏 0

@邓凡平 你好,想跟你请教个问题:

我在做给图片添加水印功能的时候,出现这样一个问题,先是报OOM问题,然后我在网上查资料知道bitmap很占内存需要及时回收,所以我又写了一个回收bitmap的方法,但是又出现新的问题报:Canvas: trying to use a recycled bitmap android,请问我该如何解决呢?

我的代码是:

if (fontBitmap != null) {
	imgSource.setImageBitmap(fontBitmap);
	originalBitmap = ((BitmapDrawable) imgSource.getDrawable())
					.getBitmap();
	myRecycle(fontBitmap);
}
	/**
	 * 回收Bitmap
	 * 
	 * @param bitmap
	 */
	private void myRecycle(Bitmap bitmap) {
		try {
			if (!bitmap.isRecycled()) {
				bitmap.recycle();
				bitmap = null;
			}
		} catch (Exception e) {
		}

我要是把上面的bitmap.recycle();去掉,则就不报:Canvas: trying to use a recycled bitmap android,但是又报OOM问题了,请问我该如何解决这个问题呢?

 

 

加载中
0
平凡简单
平凡简单
http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html 看这个android官方的图片处理方法
平凡简单
平凡简单
@wangxudong 我知道 那个是指定版本 如果android版本在12以上就会运行那个方法
w
wangxudong
回复 @李洋 : 但是文档上写Since:API Level 12的,你看看 android.util.LruCache<K, V>
平凡简单
平凡简单
@wangxudong 在低版本也可以用的 我的就是在7的下面有的
w
wangxudong
谢谢你的答案,这个主要是采用缓存的,我看那个DiskLruCache 类好像是api12之后才出来的,这样的话,我的应用需要升级。所以我不想采用这种方式
0
邓凡平
邓凡平

bitmap recycle了你还用它干嘛啊?recyle就是内存回收。bitmap对应的内存都没有了,你用它 能报错吗?OOM和你的应用使用内存有关,先去看有没有内存泄露吧。这个没什么好办法,只能仔细查代码,看有无内存分配了却没有及时回收的情况

平常上班较忙,抽空回答。


0
洗碗的科学家
洗碗的科学家

http://my.oschina.net/washpan/blog/127484你可以看看我的这篇文章,我估计是你没关闭硬件加速,不及时回收bitmap的时候要记得关闭硬件加速。

还有Lrucache是support包里的  什么版本都可以用

返回顶部
顶部