¿Está bien crear una nueva instancia de picasso cada vez
¿Está bien para crear una nueva instalación de picasso para cargar cada imagen.Por ejemplo, algo así como:
Picasso.with(context) .load(url) .placeholder(R.drawable.placeholder) .error(R.drawable.error) .centerInside( .tag(context) .into(holder.image);
En getView()
de un listAdaptor
. ¿No crea nuevo LruCache
cada vez que conducirá eventual a OOM.
- ¿Picasso aplica opciones de redimensionamiento durante fetch ()?
- Imagen parpadeando mientras se desplaza en RecyclerView
- ¿Cómo evitar que Picasso recargue imágenes en RecyclerView?
- Invalidar caché en Picasso
- Picasso IllegalArgumentException El objetivo no debe ser nulo
También puede el Context
pasado a Picasso puede ser un 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(); }
- Android Picasso Configurar el tamaño de LruCache
- ¿Cómo funciona la caché HTTP de Android?
- ¿Podría ocultar la barra de progreso después de cargar la imagen en picasso?
- Imágenes de Picasso Library y GridView
- Picasso y contexto
- Android: falla en la imagen de carga de Picasso. Cómo mostrar mensaje de error
- Error de JNI en la animación de transición de escena - Capa supera el máximo
- Borrar memoria caché de Picasso
Picasso está diseñado para ser un singleton, así que no hay una nueva instancia creada cada vez.
Este es el método with()
:
public static Picasso with(Context context) { if (singleton == null) { synchronized (Picasso.class) { if (singleton == null) { singleton = new Builder(context).build(); } } } return singleton; }
Tenga en cuenta que es un método estático para que no llame with()
en una instancia determinada, Picasso está administrando su propia instancia, que sólo se crea si singleton
es null
.
No hay ningún problema al pasar una Activity
como contexto, ya que el Builder
utilizará ApplicationContext, que es un 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(); }
En cuanto a la memoria caché, la misma se utiliza cada vez, ya que es retenida por el singleton:
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 tiene razón! Picasso ya es un singleton, por lo que utiliza la misma instancia para todas las imágenes que cargas. También eso significa que usted no necesitará a ese constructor. Simplemente llame a: "Picasso.with (context) .load (url) .into (holder.image);" Con la configuración que desea y eso es todo.
Its not problem..You are not creating Object
Picasso
ya es SingleTon
Object
Aquí está el código de Souce Clase Picasso
public static Picasso with(Context context) { if (singleton == null) { synchronized (Picasso.class) { if (singleton == null) { singleton = new Builder(context).build(); } } } return singleton; }
Más código fuente en Picasso Código fuente
- ExpandableList getChildView ejecutándose dos veces por niño
- Necesita ayuda para cambiar de actividad