2015-09-21 1 views
0

Наше приложение - ресурс изображения. В настоящее время у нас нет возможности отправлять изображения в зависимости от разрешения устройства с сервера. Изображения, отправленные с сервера, обычно имеют высокое разрешение (около 900 X 900). У меня мало запросов: 1) Будет ли загруженное и сохраненное в кеше файлового диска изображение того же размера, что и исходный размер на сервере.OutOfMemoryException с использованием Picasso

2) Как только изображение сохраняется в кеше файлового диска, как обрабатывается изображение, чтобы привести его в кэш памяти. Будет ли растровое изображение, сохраненное в кеше в памяти, преобразуется в более низкое разрешение в зависимости от разрешения устройства?

3) Если высота и ширина целевого изображения неизвестны, то как мы можем масштабировать растровое изображение в соответствии с разрешением устройства? В соответствии с нашим требованием невозможно получить фиксированную ширину и высоту изображения. Существует метод resize (int, int), но проблема в том, что мы не можем изменить высоту и ширину изображения в некоторых случаях. В идеале должно быть некоторое решение уменьшить масштаб изображения на% (скажем, на 20%).

Сбой не всегда происходит, поскольку он зависит от объема памяти.

+0

Это не проблема Пикассо, вы должны интенсивно работать, потребляя память, из-за которой вы получаете эту проблему. Основываясь на моем опыте. это лучшая библиотека. Я использовал, потому что одно из приложений полно изображений с сервера. Поэтому, пожалуйста, проверьте наличие утечек памяти в базе кода –

ответ

0

Вы можете использовать android: largeHeap = "true", чтобы запросить больший размер кучи, но это не будет работать на любых устройствах с предварительной сотой. На устройствах версии 2.3 вы можете использовать класс VMRuntime, но это не будет работать на Gingerbread и выше.

Единственный способ максимально возможного ограничения - делать задачи с интенсивной памятью через NDK, поскольку NDK не налагает ограничения памяти, такие как SDK.

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

Example: 
<application android:largeHeap="true" ....</application>