Я хочу показать 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
.