Ошибка нехватки памяти с галереей в Android - PullRequest
0 голосов
/ 16 декабря 2011

Мой код:

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
ImageView iv = new ImageView(mContext); 
Drawable photo = new BitmapDrawable(loadBitmap(URL));
iv.setImageDrawable(photo);
iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);  
return iv; 
}

private Bitmap loadBitmap(String url) {
try {
Bitmap bm = BitmapFactory.decodeStream((InputStream)this.fetch(url));
return bm;
}
catch(Exception e) {
e.printStackTrace();
return null;
}
} 

public Object fetch(String address) {
try {
URL url = new URL(address);
Object content = url.getContent();
return content;
}
catch(Exception e) {
e.printStackTrace();
}
return this;
}

Я пытаюсь просмотреть около 100 фотографий с URL в галерее.Но при просмотре около 10 фотографий произошла ошибка нехватки памяти.Что нужно сделать, чтобы избежать ошибки?

Я пытаюсь изменить getView (), как показано ниже.

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
ImageView iv = new ImageView(mContext); 
InputStream is = (InputStream)this.fetch(URL);
Drawable photo = Drawable.createFromStream(is, "src");
iv.setImageDrawable(photo);
iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);  
return iv; 
}

Проблема с памятью все еще существует.Сообщение об ошибке java.lang.OutOfMemoryError: bitmap size exceeds VM budget в строке Drawable photo = Drawable.createFromStream(is, "src");.

Ответы [ 2 ]

5 голосов
/ 16 декабря 2011

Это хорошо известная проблема, Galley не перерабатывает представления, есть разные пользовательские реализации галереи "eco".

Посмотрите на эту ТАК .

1 голос
/ 16 декабря 2011

Ну, это была известная проблема с растровыми изображениями и памятью. Одно можно сказать наверняка, вы должны соответствующим образом переработать растровые изображения. Или никогда не используйте растровое изображение вообще. Вот решение вашей проблемы. Вместо того, чтобы создавать drawable из растрового изображения, вы можете напрямую создать drawable из url.

Используйте следующий код для создания drawable.

        InputStream is = (InputStream) new URL(url).getContent();
        Drawable photo = Drawable.createFromStream(is, "src name");
...