每次都创建新的毕加索实例可以吗

Is it okay to create new Instance of picasso everytime

是否可以创建一个新的 picasso 实例来加载每个 image.For 例如:

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

listAdaptorgetView()中。难道它不会每次都创建新的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();
}
Its not problem..You are not creating Object 

Picasso 已经是 SingleTon 对象

这是毕加索的源代码Class

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

更多源代码位于 Picasso Source code

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 正在管理自己的实例,该实例仅在 singleton 为 [=16= 时创建].

传递 Activity 作为上下文没有问题,因为 Builder 将使用 single, global Application object of the current process :

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

Kalyan 是对的! Picasso 已经是单例,因此它对您加载的所有图像使用相同的实例。这也意味着您将不需要该构建器。您只需致电: "Picasso.with(context).load(url).into(holder.image);" 设置你想要的,仅此而已。