由于在视图中加载位图而导致内存泄漏

时间:2015-05-09 21:01:43

标签: android listview memory bitmap

我使用listview r为我的GetImage加载图片。我从服务器下载并缓存图像,并调用Bitmap b = BitmapFactory.DecodeFile (_coverImgLocation);接口方法从本地路径加载图像。

问题是当我使用listview加载图像时,我在ImageView中滚动后会出现内存异常。我知道必须通过计算samplesize来以正确的大小加载图像。在这种情况下,不需要它,因为来自服务器的图像已经与行中的Bitmap b = ((BitmapDrawable)_activity.Resources.GetDrawable (Resource.Drawable.splash)).Bitmap;具有相同的大小。

当我加载这样的图像时:getimage我没有内存异常但是当然这是错误的图像......

如何在没有内存泄漏的情况下从路径中检索位图?

viewholder中的public void GetImage(string originalImageLocation,string localImageLocation) { if (originalImageLocation == _coverImgLocation) { int screenWidth = _activity.Resources.DisplayMetrics.WidthPixels; int imgWidth = screenWidth - (int)ConvertDpToPix (32f); int imgHeight = (int)(ConvertDpToPix(206f)); BundleProgress.Visibility = ViewStates.Gone; Bitmap b = BitmapFactory.DecodeFile (_coverImgLocation); //memoryexection //Bitmap b = ((BitmapDrawable)_activity.Resources.GetDrawable (Resource.Drawable.splash)).Bitmap;//no memory exception using (b) { CoverIv.SetImageBitmap (b); } } } 方法:

showIt()

1 个答案:

答案 0 :(得分:0)

CoverIv.SetImageBitmap(b)有哪些方法?只要CoverIv将继续引用它,就不会对位图进行垃圾回收。因为它是静态方法,我想位图是在静态字段中保存的,永远不会被垃圾收集。删除CoverIv.SetImageBitmap(b)时是否还有内存泄漏? 请查看MAT对您位图的有效参考 - 他将向您展示为什么不收集位图。