可以创建一个新的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 正在管理自己的实例,该实例仅在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);
}
关于android - 每次都可以创建新的 picasso 实例吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27837322/