how to release bitmap memory in android
android, bitmap, memory
Solution
You must call bitmap.recycle() to release the native memory allocated when you decoded the bitmap.
And of course you must have to take care of the life cycle of the bitmap. To release it at proper time. A better solution is to use some image loader class to take care of it. See https://github.com/nostra13/Android-Universal-Image-Loader
Problem
In our program wo use lots of images,we unbindDrawables in eyery Activity and Fragment as below ``` protected void unbindDrawables(View view) { if (view != null) { if (view.getBackground() != null) { view.getBackground().setCallback(null); } if (view instanceof ImageView) { ImageView imageView = (ImageView) view; imageView.setImageDrawable(null); } if (view instanceof ViewGroup && !(view instanceof AdapterView)) { for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { unbindDrawables(((ViewGroup) view).getChildAt(i)); } if (!(view instanceof AbsSpinner) && !(view instanceof AbsListView)) { ((ViewGroup) view).removeAllViews(); } } } } ``` like this https://stackoverflow.com/a/6779067 said,but I use the mat find that the bitmap also use a lots of memory and not release. ``` Class Name | Objects | Shallow Heap | Retained Heap android.graphics.Bitmap | 490 | 23,520 | >= 36,267,912 android.graphics.Bitmap$1 | 1 | 8 | >= 8 android.graphics.Bitmap$2 | 0 | 0 | >= 80 android.graphics.Bitmap$BitmapFinalizer | 490 | 7,840 | >= 7,840 android.graphics.Bitmap$CompressFormat | 3 | 72 | >= 232 android.graphics.Bitmap$CompressFormat[]| 1 | 24 | >= 24 android.graphics.Bitmap$Config | 4 | 96 | >= 360 android.graphics.Bitmap$Config[] | 2 | 72 | >= 72 android.graphics.BitmapFactory | 0 | 0 | >= 80 android.graphics.BitmapFactory$Options | 0 | 0 | android.graphics.BitmapRegionDecoder | 0 | 0 | >= 48 android.graphics.BitmapShader | 9 | 216 | >= 15,736 Total: 12 entries (4,509 filtered) | 1,000 | 31,848 | ``` I don't know why it not be released and how to release it,any body can help me,thanks a lot!