是否可以创建一个新的毕加索实例来加载每个图像。例如:
Picasso.with(context)
.load(url)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.centerInside(
.tag(context)
.into(holder.image);
<{1>} getView()
中的listAdaptor
。是否每次都会创建新的LruCache
,最终会导致OOM。
传递给毕加索的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();
}
答案 0 :(得分:11)
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
为null
时创建。
传递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);
}
答案 1 :(得分:1)
Its not problem..You are not creating Object
Picasso
已经是SingleTon
对象
这是源代码Picasso Class
public static Picasso with(Context context) {
if (singleton == null) {
synchronized (Picasso.class) {
if (singleton == null) {
singleton = new Builder(context).build();
}
}
}
return singleton;
}
的更多源代码
答案 2 :(得分:1)
Kalyan是对的!毕加索已经是一个单身人士,因此它为你加载的所有图像使用相同的实例。这也意味着您不需要该构建器。你只需致电: “Picasso.with(上下文).load(URL).into(holder.image);”使用您想要的设置,这就是全部。