我正在使用带有Picasso的自定义Picasso.Builder()实例在适配器中提供自己的RequestHandler,如下所示:

private Picasso mPicasso;

public Adapter(Context context) {

    mContext = context;

    mPicasso = new Picasso.Builder(mContext)
            .addRequestHandler(new RequestHandler() {
            ...
            })
            .build();
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

    mPicasso.load(...)
            .fit()
            .centerCrop()
            .placeholder(...)
            .noFade()
            .into(holder.imageView);
}

但是每次活动重新创建(例如通过配置更改),com.squareup.picasso.Dispatcher$NetworkBroadcastReceiver内的实例都会泄漏,并且永远不会从内存中收集垃圾。
下面是来自eclipse内存分析器的图表:
http://www.upsara.com/images/q93m_chart49.png
有什么建议吗?

最佳答案

我也有同样的问题。通过从回调方法调用shutdown修复了此问题:

mPicasso.load(...)
            .fit()
            .centerCrop()
            .placeholder(...)
            .noFade()
            .into(holder.imageView, new Callback() {
                    @Override
                    public void onSuccess() {
                        mPicasso.shutdown();
                    }

                    @Override
                    public void onError() {
                        mPicasso.shutdown();
                    }
                });

09-26 08:33