Reducir a la mitad el uso de memoria de la aplicación de Android Anastasia Finogenova | Octubre de 2020

siguiente Explore el uso de gráficos y mapas de bits. Las aplicaciones móviles más exigentes suelen ser gráficos e imágenes. Dado que nuestra aplicación tiene un gran alcance con imágenes, que era el lugar, tuvimos la mayoría de las optimizaciones.

Si usa el mapa de bits directamente, debe tener cuidado con la excepción OutOfMemory. Para evitar esto, debe hacer algunas cosas como caché, cambie el tamaño y recicle los mapas de bits tan pronto como los use.

En nuestro caso, usamos Diapositiva una biblioteca para cargar imágenes que ofrecen esta función desde la caja. Aunque Glide le ayuda a optimizar el uso de la imagen, es necesario hacer cosas para que sea más eficiente.

Nota al margen: en mi opinión, Glide es la biblioteca más eficiente para cargar imágenes. Usamos Picasso antes y Glide es mucho mejor. Hay artículos en línea que muestran claramente el mejor desempeño de Glide.

Optimización del planeo:

  • Para dispositivos de baja potencia, use ARGB_8888 en lugar de RGB_565. En Glide v4, el formato ARGB_8888 está activado de forma predeterminada. Proporciona una imagen más fluida, especialmente en casos de transición. Pero en una pantalla más pequeña, la diferencia es bastante sutil. El uso de RGB_565 permitió hasta 2 veces el almacenamiento de memoria para imágenes.

Para desactivarlo, deberá crear su propia clase GlideModule, que generará la clase GlideApp y luego usarla en lugar del enlace Glide predeterminado.

//custom GlideModule class
@GlideModule
class CustomGlideModuleV4 : AppGlideModule() {

override fun applyOptions(context: Context, builder: GlideBuilder) {
builder.setDefaultRequestOptions(
RequestOptions().format(DecodeFormat.PREFER_RGB_565)
)
}

}

//sample usage
GlideApp.with(view.context)
.load("$imgUrl$IMAGE_URL_SIZE_SPEC")
.into(view)
  • Almacenamiento en caché cuando queda poca memoria. Cree su propia clase de aplicación y sobrescríbala onTrimMemory método.
override fun onTrimMemory(level: Int) {
GlideApp.with(applicationContext).onTrimMemory(TRIM_MEMORY_MODERATE)
super.onTrimMemory(level)
}
  • Si la pantalla ya no está visible, cancele la descarga en la instalación de reciclaje.

Algunas personas pueden no saberlo, pero el reciclador proporciona un método de devolución de llamada cuando se recicla la vista. Si la descarga está en curso cuando la vista se ha reciclado, puede ser una pérdida de recursos. Podemos limpiarlo así:

override fun onViewRecycled(holder: ViewHolder) {
holder.binding?.imageItem?.let {
GlideApp.with(it.context).clear(it)
}
super.onViewRecycled(holder)
}
  • Reduce el tamaño de la imagen. Como ejemplo, podemos usar algo como esto para cambiar el tamaño de una imagen.
Glide
.with(context)
.load(url)
.apply(new RequestOptions().override(600, 200))
.into(imageView);

Obtenga más información sobre la optimización de patines https://proandroiddev.com/how-to-optimize-memory-consumption-when-using-glide-9ac984cfe70f.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *