每次都创建新的毕加索实例可以吗
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);
在listAdaptor
的getView()
中。难道它不会每次都创建新的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);" 设置你想要的,仅此而已。
是否可以创建一个新的 picasso 实例来加载每个 image.For 例如:
Picasso.with(context)
.load(url)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.centerInside(
.tag(context)
.into(holder.image);
在listAdaptor
的getView()
中。难道它不会每次都创建新的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
:
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);" 设置你想要的,仅此而已。