zoukankan      html  css  js  c++  java
  • 回收ImageView占用的图像内存

    使用方法: RecycleBitmap.recycleImageView(mSelectorView);   参数为imageview

    /**
    * 回收ImageView占用的图像内存;
    * 使用了本方法之后,记得用一下
    * System.gc(); 提醒系统及时回收

    * @param view
    * 在setImageResource()方法前面还没有bitmap,图片可以出来。
    * 在其后面执行本方法的话,图片就不会显示出来。
    * 在setImageBitmap()方法的前面还没有bitmap,图片可以出来。
    * 在其后面执行本方法的话,图片就不会显示出来。
    * 最好在onDestroy方法中执行本方法
    */

    public static void recycleImageView(View view){
            if(view==null) return;
            if(view instanceof ImageView){
                Drawable drawable=((ImageView) view).getDrawable();
                if(drawable instanceof BitmapDrawable){
                    Bitmap bmp = ((BitmapDrawable)drawable).getBitmap();
                    if (bmp != null && !bmp.isRecycled()){
                        ((ImageView) view).setImageBitmap(null);
                        bmp.recycle();
                        log("have recycled ImageView Bitmap");
                        bmp=null;
                    }
                }
            }
        }

    使用方法:  RecycleBitmap.recycleBitmap(mNo_shop1Bitmap);  参数为bitmap

    /**
    * 可以释放到Bitmap在C层申请的内存,recycle方法会把一些相关的引用计数置0.
    * 回收Bitmap占用的图像内存;
    * 使用了本方法之后,记得用一下
    * System.gc(); 提醒系统及时回收
    * @param bitmap
    * 在setImageBitmap()方法的前面和后面都会报异常,最好在onDestroy方法中执行
    * RuntimeException:trying to use a recycled bitmap android.graphics.Bitmap@41c124e8
    */

     public static void recycleBitmap(Bitmap bitmap){
                if(bitmap!=null&&!bitmap.isRecycled()){
                   bitmap.recycle() ;  //回收图片所占的内存
                   log("have recycled Bitmap");
                   bitmap=null;
             }
        }

    /**
    * 回收List<Drawable>中的drawable
    */

    private void recycleDrawable(List<Drawable> listDrawable) {
            if(listDrawable==null){
                return;
            }
            BitmapDrawable bd;
            Bitmap bitmap;
            for(Drawable drawable:listDrawable){
                if(drawable!=null){
                    bd = (BitmapDrawable) drawable;
                    bitmap =bd.getBitmap(); 
                    if(bitmap!=null&&!bitmap.isRecycled()){
                        bitmap.recycle() ;  //回收图片所占的内存
                        log("have recycled Bitmap");
                        bitmap=null;
                    }
                }
            }
            listDrawable.clear();//它清空了,外面的集合也会清空
            listDrawable=null;//它等于null,外面的集合不等于null
     }
  • 相关阅读:
    GOF23设计模式汇总
    获取表单提交MVC错误信息
    Spring.Net
    简单工厂、工厂方法和抽象工厂
    Json和JsonP
    mysql8无法用navicat连接(mysql8加密方式的坑)
    (4.16)mysql备份还原——物理备份之XtraBackup实践
    mysql如何下载历史版本?
    如何测试端口通不通(四种方法)
    linux移动复制删除命令
  • 原文地址:https://www.cnblogs.com/lipeineng/p/5286480.html
Copyright © 2011-2022 走看看