Android java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected]

近期遇到了如标题这种错误,再次记录解决方法。本文參考帖子:

http://bbs.csdn.net/topics/390196217

出现此bug的原因是在内存回收上。里面用Bitamp的代码为:

top=(ImageView)view.findViewById(R.id.top);
        bitmap=ImgBitmap.comeFromRes(getResources(), R.drawable. top);
        top.setImageBitmap(bitmap);
        bottom=(ImageView)view.findViewById(R.id.bottom);
        bitmap1=ImgBitmap.comeFromRes(getResources(), R.drawable. bottom);
        bottom.setImageBitmap(bitmap1);

在回收时,应该这样写:

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        top.setImageBitmap(null);
        bottom.setImageBitmap(null);
        ImgBitmap.MyRecycle(bitmap);
        ImgBitmap.MyRecycle(bitmap1);
        super.onDestroy();
    }

或者

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        ImgBitmap.MyRecycle(mBitmap);
        ImgBitmap.MyRecycle(mBitmap1);
        top=null;
        bottom=null;
        super.onDestroy();
     }

另外MyRecycle方法的代码例如以下:

public static void MyRecycle(Bitmap bmp){
    if(!bmp.isRecycled() && null!=bmp){
        bmp=null;
    }
}

总之是必需要解除与bitmap有关的全部绑定。

时间: 2024-11-12 21:51:43

Android java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected]的相关文章

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected]

最近遇到了如标题这样的错误,再次记录解决方法.本文参考帖子: http://bbs.csdn.net/topics/390196217 出现此bug的原因是在内存回收上,里面用Bitamp的代码为: top=(ImageView)view.findViewById(R.id.top); bitmap=ImgBitmap.comeFromRes(getResources(), R.drawable. top); top.setImageBitmap(bitmap); bottom=(ImageVi

Canvas: trying to use a recycled bitmap [email protected]

近期在做和图片相关显示的出现了一个问题,整理一下思路.分享出来给大家參考一下: Exception Type:java.lang.RuntimeException java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected] at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1282) at android.view.GLE

Android java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

E/AndroidRuntime(7200): Uncaught handler: thread Thread-8 exiting due to uncaught exceptionE/AndroidRuntime( 7200): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 原因是非主线程中默认没有创建Looper对象,需要先调用Looper

兔子--Android java.lang.RuntimeException:Parcelable encountered IOException writing serializable objec

Activity之间传递数据时,为了方便,将很多数据封装成对象,然后将整个对象传过去.传对象有2中情况, 一种是实现Parcelable接口的 一种是实现Serializable接口的 用bundle.putSerializable(key ,object)产地参数或者用intent.putExtra(key object)传递参数. 但是使用时候,出现了异常 1.java.io.NotSerializableException异常 原因:对象没有实现Serializable接口 解决办法:让对

【转】Android手动回收bitmap,引发Canvas: trying to use a recycled bitmap处理

在做Android的开发的时候,在ListView 或是 GridView中需要加载大量的图片,为了避免加载过多的图片引起OutOfMemory错误,设置了一个图片缓存列表 Map<String, SoftReference<Bitmap>> imageCache , 并对其进行维护,在图片加载到一定数量的时候,就手动回收掉之前加载图片的bitmap,此时就引起了如下错误: java.lang.RuntimeException: Canvas: trying to use a re

Android手动回收bitmap,引发Canvas: trying to use a recycled bitmap处理

在做Android的开发的时候,在ListView 或是 GridView中需要加载大量的图片,为了避免加载过多的图片引起OutOfMemory错误,设置了一个图片缓存列表 Map<String, SoftReference<Bitmap>> imageCache , 并对其进行维护,在图片加载到一定数量的时候,就手动回收掉之前加载图片的bitmap,此时就引起了如下错误: Java代码   java.lang.RuntimeException: Canvas: trying to

关于Canvas: trying to use a recycled bitmap android.graphics的疑惑

============问题描述============ 因为viewpager图片内存溢出的问题,不得不考虑手动释放内存,不过出的问题我不理解. 我的想法是创建一个Map,然后用instantiateItem中的参数arg0当作键,bitmap当作值,当destroyItem中去掉VIew的时候我捎带着把不再用到的bitmap也回收掉 //这个是存bitmap的map public HashMap<Integer, SoftReference<Bitmap>> cacheBit;

解决Android studio 启动报错java.lang.RuntimeException: java.lang.IllegalArgumentException

报错内容 Internal error. Please report to https://code.google.com/p/android/issues java.lang.RuntimeException: java.lang.IllegalArgumentException: Argument for @NotNull parameter 'name' of com/android/tools/idea/welcome/Platform.<init> must not be null 

Android Studio 首次安装报错 Java.lang.RuntimeException:java.lang.NullPointerException...错

下次安装报:Java.lang.RuntimeException: java.lang.NullPointerException......错 只需在文件..\Android Studio\bin\idea.properties(需要对应自己的安装目录下)最后面加一行代码:disable.android.first.run=true  就可以完美解决问题了