15

I want to show a ViewPager with ~50 pages, each containing a different image. Using Picasso, the first 20-25 pages work perfectly. However, at that point I get an OutOfMemoryError, and no images are loading at all:

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

I'm using the following code in my 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);
}

What can I do to avoid this?

4

2 回答 2

16

我发现了这个问题

注意到一些要点:

  • 利用skipMemoryCache()
  • 利用builder.executor(Executors.newSingleThreadExecutor());
  • 使用一个实例Picasso:不要Picasso.Builder每次都使用创建一个新实例。

我设法解决了最后一个问题。

于 2014-04-21T20:24:44.913 回答
10

这个问题在谷歌点击率上排名很高,所以我正在添加我的解决方案来解决这个问题。

添加.fit()解决了我的问题。我正在使用以下代码成功加载图像。

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

删除.fit()会导致我的应用程序抛出OutOfMemoryException.

于 2015-04-03T21:46:33.437 回答