使用方法: 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
}