Intereting Posts
Action-bar – элемент подменю, текст и изображение не работают должным образом Содержимое Android Webview не должно быть потеряно при изменении ориентации, но графический интерфейс должен быть правильно обновлен Построение источника android из-за версии openjdk java Аутентификация веб-API ASP.NET Получать 3 широковещательных передачи Когда сеть переключается с GPRS на Wi-Fi Как предотвратить изменение размера и ретрансляцию окна при отображении мягкой клавиатуры Невозможно выполнить dex: несколько файлов dex определяют Lcom / … еще раз Android: Совместимость с пользовательским интерфейсом (Jenkins + Spoon +?) Как использовать Google Place Check-Ins для Android Как изменить метку активности Android Получить ActionBar, чтобы перерисовать себя? Функция Chrome-Data Chrome включена в Crosswalk WebView? Не закрывайте информацию на клике. (Google Maps Android API V2) Как blit () в android? Почему Модернизация используется с RxJava

Как бороться с 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); } 

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

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

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

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

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

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

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

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

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