package com.socialize.util; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import com.socialize.log.SocializeLogger; import java.io.InputStream; /** * Because bitmaps may expire in cache while still attached to a view, we need * to provide a catch-all otherwise the app will crash if a view tries to draw * a recycled bitmap. * @author jasonpolites */ public class SafeBitmapDrawable extends BitmapDrawable { public SafeBitmapDrawable(InputStream is) { super(is); } public SafeBitmapDrawable() { super(); } public SafeBitmapDrawable(Bitmap bitmap) { super(bitmap); } public SafeBitmapDrawable(Resources res, Bitmap bitmap) { super(res, bitmap); } @Override public void draw(Canvas canvas) { if(!isRecycled()) { try { super.draw(canvas); } catch (Throwable e) { SocializeLogger.w("Bitmap was recycled"); } } else { SocializeLogger.w("Bitmap was recycled"); } } public boolean isRecycled() { Bitmap bmp = getBitmap(); return (bmp == null || bmp.isRecycled()); } public void recycle() { Bitmap bmp = getBitmap(); if(bmp != null) { bmp.recycle(); } } }