Будьте осторожны с обоими ответами здесь - они оба имеют шанс на OutOfMemoryException
. Протестируйте свое приложение, попытавшись загрузить большое изображение, например обои для рабочего стола. Чтобы быть понятным, оскорбительные строки:
final Bitmap bm = BitmapFactory.decodeStream(bis);
и
Drawable thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
Ответ Феликса поймает его в выражении catch {}, и вы могли бы что-то с этим сделать
Вот как обойти ошибку OutOfMemoryException
:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap bmp = null;
try {
bmp = BitmapFactory.decodeStream(is, null, options);
} catch (OutOfMemoryError ome) {
// TODO - return default image or put this in a loop,
// and continue increasing the inSampleSize until we don't
// run out of memory
}
А вот мои комментарии об этом в моем коде
/**
* Showing a full-resolution preview is a fast-track to an
* OutOfMemoryException. Therefore, we downsample the preview image. Android
* docs recommend using a power of 2 to downsample
*
* @see <a
* href="/376948/problema-s-nehvatkoi-pamyati-pri-zagruzke-izobrazheniya-v-rastrovyi-obekt#376958">StackOverflow
* post discussing OutOfMemoryException</a>
* @see <a
* href="http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize">Android
* docs explaining BitmapFactory.Options#inSampleSize</a>
*
*/
Ссылки сверху комментариев:
Ссылка 1
Ссылка 2