Мое приложение для Android загружает кучу изображений, чтобы отображать их на 5 страницах на PagerAdapter. Я тестирую его на нескольких устройствах, включая 6p. Я постоянно получаю проблему OOM. Я попробовал настраиваемое преобразование, чтобы уменьшить изображение, но выглядит, что сервер возвращает правильные изображения размеров, а inSampleSize на BitmapFactory.options получается 1, так что это не помогло. Я также должен упомянуть, что для хорошего пользовательского интерфейса мы загружаем первые 3 изображения на все 5 страниц. Таким образом, приблизительно 15 запросов изображения и запрошенные для загрузки picasso довольно быстро, могут даже запрашиваться одновременно одновременно. Я использую BitmapConfig по умолчанию.Picasso - Android - OutOfMemory при загрузке <4MB изображений
И я использую Кинжал для инъекции одного экземпляра пикассо.
@Provides
@Singleton
public Picasso providePicasso(OkHttpClient client) {
return new Picasso.Builder(context)
.loggingEnabled(true)
.indicatorsEnabled(true)
.downloader(new OkHttp3Downloader(client))
.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
Timber.e(exception, "Failed to load image: %s", uri);
}
})
.build();
}
И okHttpClient используется:
private static OkHttpClient.Builder createOkHttpClient(Context context) {
// Install an HTTP cache in the application cache directory.
File cacheDir = new File(context.getCacheDir(), ShopConstants.HTTP);
Cache cache = new Cache(cacheDir, ShopConstants.IMAGE_DISK_CACHE_SIZE);
return new OkHttpClient.Builder()
.cache(cache)
.connectTimeout(ShopConstants.HTTP_TIMEOUT_VALUE, SECONDS)
.readTimeout(ShopConstants.HTTP_TIMEOUT_VALUE, SECONDS)
.writeTimeout(ShopConstants.HTTP_TIMEOUT_VALUE, SECONDS);
}
Если вы видите в статистике сброшенных ниже, есть в общей сложности лишь 4MB изображений, которые загружаются с сервера. Однако размер кеша увеличивается до 24 МБ, а общий размер растрового изображения составляет около 123 МБ. Я не понимаю, почему общий размер растрового изображения намного больше, чем общий размер загруженных изображений.
===============BEGIN PICASSO STATS ===============
Memory Cache Stats
Max Cache Size: 28760941
Cache Size: 24174420
Cache % Full: 85
Cache Hits: 0
Cache Misses: 24
Network Stats
Download Count: 24
Total Download Size: 4163837
Average Download Size: 173493
Bitmap Stats
Total Bitmaps Decoded: 19
Total Bitmap Size: 122061516
Total Transformed Bitmaps: 3
Total Transformed Bitmap Size: 3202668
Average Bitmap Size: 6424290
Average Transformed Bitmap Size: 177926
===============END PICASSO STATS ===============
Может кто-нибудь скажет мне, если я что-то делаю неправильно. Единственный способ, которым я могу избежать OOM, - это включить в манифест «largeHeap».
Большое спасибо заранее за помощь
потому что Bitmap всегда принимает W * H * 4 (для ARGB_8888) ... загруженный размер COMPRESSED не имеет значения – Selvin
Попробуйте использовать опцию crop, доступную в Picasso. http://stackoverflow.com/questions/30011106/download-image-and-resize-to-avoid-oom-errors-picasso-fit-distorts-image – Ajit