// http://code.google.com/p/android/issues/detail?id=8488
  private void recycleDrawablesRecursive(ViewGroup viewGroup, List<ImageView> images) {

    int childCount = viewGroup.getChildCount();
    for (int index = 0; index < childCount; index++) {
      View child = viewGroup.getChildAt(index);
      if (child instanceof ImageView) {
        images.add((ImageView) child);
      } else if (child instanceof ViewGroup) {
        recycleDrawablesRecursive((ViewGroup) child, images);
      }
    }
    viewGroup.destroyDrawingCache();
  }
 // http://code.google.com/p/android/issues/detail?id=8488
 public void recycleDrawables() {
   List<ImageView> images = new ArrayList<ImageView>();
   // collect all the image views
   recycleDrawablesRecursive(this, images);
   for (ImageView imageView : images) {
     imageView.destroyDrawingCache();
     Drawable d = imageView.getDrawable();
     if (d != null && d instanceof BitmapDrawable) {
       imageView.setImageDrawable(null);
       BitmapDrawable bd = (BitmapDrawable) d;
       Bitmap bmp = bd.getBitmap();
       if (bmp != null) {
         bmp.recycle();
       }
     }
   }
 }