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