Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Некоторые отмеченные моменты:

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

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

Ответ 2

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

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

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

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