Picasso y contexto

He estado jugando últimamente con Picasso como una biblioteca de cargador de imágenes. Lo uso en conjunción con Dagger y OkHtttp.

Mis únicas preguntas con respecto a esta biblioteca son el uso del contexto y la instanciación de la biblioteca a través del constructor.

No estoy completamente seguro de cuál es el contexto necesario (no se puede encontrar la documentación sobre él) y también qué contexto debemos utilizar (ApplicationContext o ActivityContext?) Y por qué.

Mirando ejemplos (por ejemplo gran aplicación de ejemplo para ver todo esto en combinación) u2020 por Jake Wharton, sólo una única instancia de Picasso se crea con el contexto de la aplicación en su lugar. Algo como esto:

@Provides @Singleton Picasso providePicasso(@ApplicationContext Context context, OkHttpClient client) { Picasso picasso = new Picasso.Builder(context) .downloader(new OkHttpDownloader(client)) .listener(new Picasso.Listener() { @Override public void onImageLoadFailed(Picasso picasso, Uri uri, Exception e) { Log.e("Picasso", "Failed to load image:" + uri); } }) .build(); return picasso; } 

Esto se utiliza como un objeto global y sólo se instancia una vez. Mi pregunta es ¿por qué no instanciar una nueva instancia picasso en el nivel de actividad (con el mismo OkHttpClient global que configura el LRUCache y se inyecta previamente) y pasando la actividad como contexto? Estaba leyendo esta mañana en un hilo de Github Picasso que se debía usar el Contexto de la Aplicación pero no dar más detalles al respecto.

Por lo tanto, como conclusión, mi pregunta es: – ¿Para qué se utiliza el contexto y cuál debemos usar? – Por qué utilizar un objeto global y no una instancia de nivel de actividad.

¡Gracias!

No importa cuál elija, al usar el método Picasso.with(Context) predeterminado, o el Builder , recuperará el Context de la aplicación desde el Context dado:

 /** 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(); } 

Talón copiado de Picasso.java # Builder .


Si realmente quieres crear una nueva instancia en cada actividad: Para cada instancia de Picasso que crees, básicamente creas una nueva memoria caché: las imágenes almacenadas en caché en la primera instancia no serán reutilizadas en la segunda instancia. Es muy probable que te encuentres con OutOfMemoryException aquí, ya que Picasso no maneja esto.

  • ¿Cómo tratar con Picasso OutOfMemoryError?
  • Picasso no funciona si url contiene espacio
  • Picasso problema de extracción de imágenes cuando se utiliza con RecyclerView
  • Fade in animation while loading image Uso de Picasso
  • Cómo cargar un mapa de bits con Picasso sin usar un ImageView?
  • Biblioteca Picasso - Fuera de Memoria
  • Picasso no carga imagen de caché en listview
  • RecyclerView desplazamiento laggy
  • Con RecyclerView, ¿Picasso sigue siendo necesario?
  • Cambiar el tamaño de la imagen a todo el ancho y la altura variable con Picasso
  • Borrar memoria caché de Picasso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.