如何处理Picasso OutOfMemoryError?

时间:2014-04-21 20:03:46

标签: android picasso

我想要显示一个约有50页的ViewPager,每页包含不同的图像。使用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);
}

我该怎么做才能避免这种情况?

2 个答案:

答案 0 :(得分:15)

我找到了this issue

有些观点指出:

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

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

答案 1 :(得分:9)

此问题在Google热门排名中排名很高,因此我在此问题中添加了我的解决方案。

添加.fit()为我解决了这个问题。我已成功加载以下代码的图片。

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

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