15

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);
}

これを避けるにはどうすればよいですか?

4

2 に答える 2

16

この問題を発見しました。

いくつかの点が指摘されました:

  • 使用するskipMemoryCache()
  • 使用するbuilder.executor(Executors.newSingleThreadExecutor());
  • の1 つのインスタンスを使用します。毎回Picassoを使用して新しいインスタンスを作成しないでください。Picasso.Builder

私は最後の問題で問題を解決することができました。

于 2014-04-21T20:24:44.913 に答える
10

この質問は Google のヒット数で上位にランクされているので、この問題に私の解決策を追加します。

追加.fit()すると問題が解決しました。以下のコードで画像を正常に読み込んでいます。

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

削除する.fit()と、アプリケーションがOutOfMemoryException.

于 2015-04-03T21:46:33.437 に答える