Intereting Posts
Как начать новую строку с места для следующей строки в Html.fromHtml для просмотра текста в android Выпуск на реальном устройстве с использованием векторного изображения в android. SVG-андроид Как добавить границу к тексту в текстовом андроиде Предупреждение об ошибке Eclipse при открытии макета графики Пользовательский просмотр уведомлений Удалить тени под панелью действий appcompat Как добавить кнопку поиска на панели инструментов в материальном дизайне Преобразование изображения в PDF в Android Галерея изображений с горизонтальной прокруткой Android Как отобразить Soft Keyboard из сервиса? Glide: Как найти, если изображение уже кэшировано и использовать кешированную версию? Десериализация GSON с типичными типами и именами общих полей Как программно настроить z порядок просмотров Как некоторые приложения отслеживают собственную деинсталляцию на android Android-оповещение по уведомлению службы push-push

Как бороться с Picasso OutOfMemoryError?

Я хочу показать ViewPager с ~ 50 страницами, каждый из которых содержит другое изображение. Используя Picasso, первые 20-25 страниц работают отлично. Однако в этот момент я получаю OutOfMemoryError , и никакие изображения не загружаются вообще:

 Throwing OutOfMemoryError "Failed to allocate a 7477932 byte allocation with 1932496 free bytes" 

Я использую следующий код в своем PagerAdapter :

 @Override public Object instantiateItem(final ViewGroup container, final int position) { View view = getView(); Picasso picasso = getImageLoader(mContext); picasso.load(getUrl(position)).fit().into((ImageView) view.findViewById(R.id.imageview)); container.addView(view); return view; } @Override public void destroyItem(final ViewGroup container, final int position, final Object object) { container.removeView((View) object); } 

Что я могу сделать, чтобы этого избежать?

Solutions Collecting From Web of "Как бороться с Picasso OutOfMemoryError?"

Я нашел эту проблему .

Некоторые пункты отметили:

  • Использовать skipMemoryCache()
  • Используйте builder.executor(Executors.newSingleThreadExecutor());
  • Используйте один экземпляр Picasso : не создавайте новый экземпляр, используя Picasso.Builder каждый раз.

Мне удалось исправить мою проблему с последней.

Этот вопрос занимает высокое место в хитах Google, поэтому я добавляю свое решение этой проблемы.

Добавление .fit() решило проблему для меня. Я успешно загружаю изображения с помощью кода ниже.

 picasso.load(PartyUtil.getPartyIconResourceFromFullPartyName(parties.get(position))) .fit() .into(holder.icon); 

Удаление .fit() заставляет мое приложение выкидывать OutOfMemoryException .