可以创建一个新的Picasso实例来加载每个图像吗,例如:

Picasso.with(context)
    .load(url)
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .centerInside(
    .tag(context)
    .into(holder.image);

getView()listAdaptor表示。它不会每次都创建新的LruCache,最终会导致OOM。

传递给 picasso 的Context也可以是Activity Context:
/** Start building a new {@link Picasso} instance. */
public Builder(Context context) {
  if (context == null) {
    throw new IllegalArgumentException("Context must not be null.");
  }
  this.context = context.getApplicationContext();
}

最佳答案

picasso 设计为单例,因此不会每次都创建一个新实例。

这是with()方法:

public static Picasso with(Context context) {
    if (singleton == null) {
      synchronized (Picasso.class) {
        if (singleton == null) {
          singleton = new Builder(context).build();
        }
      }
    }
    return singleton;
}

请注意,这是一个静态方法,因此您无需在特定实例上调用with(), picasso 正在管理自己的实例,该实例仅在singletonnull时创建。

传递Activity作为上下文没有问题,因为Builder将使用ApplicationContext,它是single, global Application object of the current process:
public Builder(Context context) {
      if (context == null) {
        throw new IllegalArgumentException("Context must not be null.");
      }
      this.context = context.getApplicationContext();
}

至于缓存,每次都使用相同的缓存,因为它由单例保留:
public Picasso build() {
      // code removed for clarity

      if (cache == null) {
        cache = new LruCache(context);
      }
      // code removed for clarity

      return new Picasso(context, dispatcher, cache, listener, transformer, requestHandlers, stats,
          defaultBitmapConfig, indicatorsEnabled, loggingEnabled);
}

关于android - 每次都可以创建新的 picasso 实例吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27837322/

10-10 11:57
查看更多