Я использую viewholde
r для загрузки изображений для своих listview
. Я загружаю и кеширую изображения с сервера, и вызывается метод интерфейса GetImage
для загрузки изображения с локального пути.Утечка памяти из-за загрузки растрового изображения в телезрителе
Проблема заключается в том, что я использую Bitmap b = BitmapFactory.DecodeFile (_coverImgLocation);
для загрузки изображения, я получаю исключение памяти после прокрутки в listview
. Я знаю, что изображения должны быть загружены с правильным размером, вычисляя выборку. В этом случае это не требуется, потому что изображения с сервера уже имеют тот же размер, что и ImageView
s из строк.
, когда я загрузить изображение, как это: 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);
}
}
}
let getImage возвращает ваши 'Bitmap' и' CoverIv.SetImageBitmap (b); 'должен быть вызван непосредственно в' getView() ', но вы не используете свой' int', вы? вы также уверены в размерах рисунка, можете ли вы сказать измерение? 400 * 400? или выше – Elltz
Что вы имеете в виду, что вы не используете свой ints? размер изображений правильный, я на 100% уверен. Я не использую decodefile, но я использую imageloader, который вычисляет выборки и масштабирует изображения с мощностью 2. просто ради этого вопроса я заменил imageloader.getimage() на bitmapfactory.Decodefile – Joske369