studio para moviles herramientas desarrollo crear con avanzado aplicaciones android performance android-glide

android - para - Deslizar carga de imagen con contexto de aplicación



herramientas de android studio pdf (1)

Estoy usando glide para cargar imágenes en mi aplicación de Android, para evitar bloqueos, estoy cargando imágenes con el contexto de la aplicación. ¿Cuál será el efecto de esto en el rendimiento de la aplicación y la memoria?


¿Cuál será el efecto de esto en el rendimiento de la aplicación y la memoria?

Glide proporciona muchos métodos .with() por una razón: sigue el ciclo de vida.

Imagine un Fragment que se agrega dinámicamente a una actividad. En su método onCreateView , inicia una carga de deslizamiento de una imagen de 3 MB. Ahora, ¿qué sucede si el usuario presiona el botón de retroceso y se elimina el Fragmento o se cierra toda la actividad?

  • Si usa with(getActivity().getApplicationContext()) no sucederá nada, todos los 3 MB de datos se descargan y luego se decodifican, almacenan en caché, probablemente incluso se configuran en ImageView, que luego se recolecta basura, porque la única referencia fue Glide interno.
  • Si usa with((Fragment)this) Glide se suscribe a los eventos del ciclo de vida del Fragment y tan pronto como se detiene el Fragment, cualquier solicitud pendiente debe pausarse; y cuando se destruye, se borran todas las solicitudes pendientes. Esto significa que la descarga de la imagen se detendrá a mitad de camino y ese Fragmento muerto no usará más recursos.
  • Si usa with(getActivity()) Glide se suscribe a los eventos del ciclo de vida de la Actividad y sucede lo mismo que antes, pero solo cuando la Actividad se detiene o se destruye.

¡Así que la mejor práctica es utilizar el contexto / fragmento más cercano posible para evitar que se completen las solicitudes no utilizadas! (También hay una forma manual de detener una carga: Glide.clear(ImageView|Target) .

Para aplicar esto en la práctica, intente usar with(this) cuando sea posible, pero cuando no lo sea, como en un adaptador o un método de carga de imágenes centralizado, pase un RequestManager glide como argumento y use glide.load(... , por ejemplo:

static loadImage(RequestManager glide, String url, ImageView view) { glide.load(url).into(view); }

o en adaptador:

class MyAdapter extends WhichEveryOneYouUse { private final RequestManager glide; MyAdapter(RequestManager glide, ...) { this.glide = glide; ... } void getView/onBindViewHolder(... int position) { // ... holder magic, and get current item for position glide.load... or even loadImage(glide, item.url, holder.image); } }

y usarlos de Activity / Fragment:

loadImage(Glide.with(this), url, findViewById(R.id.image)); // or list.setAdapter(new MyAdapter(Glide.with(this), data));