studio recyclerview example ejemplo android performance android-asynctask android-recyclerview

android - recyclerview - Cargando datos de manera efectiva en RecycleView



recyclerview android studio ejemplo (1)

Estoy completando una lista de datos y estos datos se cargan en 3 pasos, por lo tanto, después de finalizar el primer paso, ya muestro los datos al usuario. Luego actualizo la interfaz de usuario paso a paso cada vez que cambia el estado de carga de datos ...

Uso un RecyclerView para mostrar mis datos. Pude observar que cuando la carga de los pasos individuales es muy rápida, la IU está bloqueando (especialmente cuando el usuario está desplazándose muy rápido) ... Entonces necesito agrupar los eventos y solo actualizar la IU cada x ms. ..

Con las pruebas que vi, la actualización de la IU cada 150 ms parece ser buena y rápida, y no da lugar a ninguna tartamudez visible.

Pero no estoy seguro de cómo reaccionan los dispositivos u otros dispositivos más antiguos.

¿Alguien tiene alguna experiencia en esta dirección y puede decirme qué valor sería bueno?

Pregunta general

Probablemente, la pregunta se puede hacer de forma más general: al actualizar la IU con mucha frecuencia, ¿cuál es la mejor frecuencia para evitar el bloqueo de la IU? O ¿cuál es el tiempo mínimo para esperar antes de actualizar la IU de nuevo?


Su pregunta es muy interesante y hay algunos métodos para resolverla. Acabo de poner algunas soluciones aquí con referencia.

1. Guarde sus datos en caché

Cuando el usuario se desplaza, su adaptador consultará algunos datos de la matriz, de la base de datos o de la red. Debido a su bajo rendimiento, supongo que puede ser un problema porque carga mucho tiempo de datos. Entonces, el mejor método para resolver este problema es almacenar datos en caché.

Puede almacenar en caché sus datos en la memoria usando la clase LRUCache y en el disco utilizando DiskLRUCache. Hay una guía de Android para este problema: Caching bitmap

Código de Psuedo:

if (memoryCache.get(key)) { // load data from memory and assign to cell } else if (diskCache.get(key)) { // load data from disk and assign to cell } else { // get data from database or network // assign to cell // save to memory cache // save to disk cache }

2. Use hilo diferente para cargar datos

Cuando procesa una tarea de ejecución prolongada que afecta a su UI, debe posponerla en el subproceso UI y crear un nuevo subproceso para su propósito. Puede usar Asynctask para este propósito.

El problema en este método es: al cargar datos desde el fondo, la celda mostrada en la pantalla por evento de desplazamiento necesita datos diferentes. Entonces, cuando el viejo objeto asynctask terminó de funcionar, asigna datos antiguos a su celda. ¡¡¡BACHE!!! . Entonces debes controlar el estado de tu celular cuidadosamente. Hay un buen tutorial: Carga de imagen de proceso en hilo diferente

3. Simplifica tu vista

Si no utiliza algo como el manejo de la base de datos, solicitud de red mientras se desplaza, tal vez el problema es que su vista es demasiado compleja. Debería usar esta herramienta: Hierarchy Viewer para verificar qué archivo de diseño tiene un problema de rendimiento. También puede usar la herramienta Herramienta de sobregrabación de la GPU para comprobar si muchas partes de su vista han extraído muchas cosas innecesarias.

4. Detecta tiempo para actualizar la base de datos en velocidad de fotogramas

Siempre debe mantener su velocidad de cuadros por debajo de 60 fps. Con esa velocidad de fotogramas, el usuario no reconocerá retraso, torpe ... en su opinión. Puede usar GPU Profiler para verificar la velocidad de fotogramas. Basándose en esa velocidad de fotogramas, usted decidirá que debe simplificar la vista, optimizar el método onDraw u optimizar el dibujo de la GPU (debido al sobregiro) para mantener su velocidad de cuadro UI <= 60 fps.

Todos los métodos anteriores que he integrado a mi proyecto se llama ImageUploader . Esta aplicación carga la imagen al servicio de Flickr y muestra una lista de todas las imágenes cargadas o ve imágenes individuales.

Google ha subido una serie de patrones de rendimiento de Android que le enseñan muchas cosas útiles, como almacenamiento en caché, procesamiento por lotes, sugerencias útiles ...

Espero que esto ayude :)