android 图片回收问题

ifly555 2012-07-23 11:17:44
代码简介
回收函数
void gatRecycle(){
BitmapDrawable gatLayoutbd=(BitmapDrawable)gatLayout.getBackground();
gatLayoutbd.getBitmap().recycle();}
调用回收函数
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
gatRecycle();
}
当返回此页面是在设置那个图片的背景
@Override
protected void onStart() {
// TODO Auto-generated method stub
gatLayout.setBackgroundResource(R.drawable.gatbg);}

请问为什么会报错 trying to use a recycled bitmap

求大侠给解决一下!!!
...全文
498 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huage 2012-07-23
  • 打赏
  • 举报
回复
gatLayoutbd.getBitmap()= null;
不知道可以不
ifly555 2012-07-23
  • 打赏
  • 举报
回复
嗯 好的 非常感谢!
MiceRice 2012-07-23
  • 打赏
  • 举报
回复
我倒。。。比如:

BitmapDrawable gatLayoutbd=(BitmapDrawable)gatLayout.getBackground();
gatLayout.setBackground(null);
gatLayoutbd.getBitmap().recycle();
ifly555 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

出现这个错误,意味着回收的时机有问题,别人还要用你就回收,那肯定是不行的。

这就会导致你回收完毕后;别人拿这个图片开始输出,然后发现图片已经没了,自然就会报错!

也就是说,你在回收之前,至少先把之前的引用给释放掉,比如:
gatLayout.setBackground(null);

如果回收之前置空的话,那要怎么找到以前引用的那个资源了呢??
ifly555 2012-07-23
  • 打赏
  • 举报
回复
哦 我试试 先谢谢啦
MiceRice 2012-07-23
  • 打赏
  • 举报
回复
你这种说法只是站在开发者角度的理论,并不绝对反应控件切换时内部的实际操作;换而言之就是并不绝对保险,所以必须确保该图片绝对没有被任何控件所引用。

也就是重新设置为null,才是最保险的。
ifly555 2012-07-23
  • 打赏
  • 举报
回复
从第一个Activity跳转到第二个Activity的时候回收图片,第二个Activity都没有用到第一个Activity中的图片,当从第二个Activity返回到第一个Activity的时候暴出使用已回收资源的错误,但是已经使用onStart()方法重新设置了背景了,怎么还会出错呢???
MiceRice 2012-07-23
  • 打赏
  • 举报
回复
出现这个错误,意味着回收的时机有问题,别人还要用你就回收,那肯定是不行的。

这就会导致你回收完毕后;别人拿这个图片开始输出,然后发现图片已经没了,自然就会报错!

也就是说,你在回收之前,至少先把之前的引用给释放掉,比如:
gatLayout.setBackground(null);



具体看这里的解释:
http://blog.csdn.net/Lavernock/article/details/5966517

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧