Este artículo trata sobre cómo crear una mejor aplicación de Android (¡no más retrasos!) y construir una interfaz que funcione sin problemas. Descubriremos cómo aumentar el rendimiento de una aplicación de Android. En primer lugar, debemos determinar una gran pregunta:
¿Por qué la aplicación de Android es lenta? o ¿Por qué se retrasa una aplicación de Android?
Comenzaremos con el tema culpable detrás de su aplicación con bajo rendimiento:
Recolector de basura : ¡El impuesto malvado de Android!
La principal causa del mal rendimiento de la aplicación de Android es que ejecuta GC con frecuencia . En pocas palabras: durante el tiempo en que se ejecuta GC, la aplicación real no se ejecuta. Por lo tanto, cuando se ejecuta la aplicación de Android, asigna muchos objetos en función de su código, y cuando ya no se hace referencia a esos objetos, el sistema llama a GC cuando hay presión de memoria para desasignar esos objetos, por lo que si la asignación y la desasignación de objetos ocurren en de forma regular, el GC se ejecuta regularmente para liberar memoria, por lo que cuanto más tiempo se ejecuta el GC, menos tiempo se ejecuta la aplicación. Como resultado, parece que la aplicación es lenta. Como resultado, el usuario de la aplicación tiene una experiencia negativa.
¿Cómo garantizar una interfaz de usuario y transiciones fluidas?
Para una representación fluida de la interfaz de usuario, la aplicación de Android actualiza su interfaz de usuario cada 16 ms (suponiendo 60 FPS -> 1000 ms/60 = 16,67 ms-16 ms). Por lo tanto, si el GC está funcionando durante ese período, la aplicación no puede actualizar la interfaz de usuario, lo que da como resultado que se omitan algunos cuadros, lo que da la impresión de que la aplicación es lenta. Entonces, la causa real es que el GC se estaba ejecutando o que el trabajo se estaba realizando en el subproceso principal demasiado rápido, lo que impedía que la aplicación representara su interfaz de usuario sin problemas.
Otra causa es que la aplicación puede estar funcionando demasiado en el subproceso principal, y si algún método/tarea tarda más de 16 a 18 ms, la aplicación no podrá actualizar la interfaz de usuario, lo que provocará un retraso en la aplicación durante ese período.
GeekTip: Esencialmente, el sistema intenta actualizar la interfaz de usuario cada 16 a 18 ms.
¿Qué sucede si nuestro trabajo de subproceso principal tarda más de 16 ms? Por ejemplo, supongamos que nuestro trabajo tarda 26 ms. El sistema intenta actualizar la interfaz de usuario, pero no está listo. Como resultado, no se actualizará nada. Como resultado, la interfaz de usuario se actualizó después de 32 ms en lugar de 16 ms. Falta un marco.
No habrá movimiento suave incluso si se pierde un cuadro. Será lento para el usuario. Estas son las causas del bajo rendimiento de la aplicación de Android.
¿Cómo mejorar?
Para maximizarlo, debemos concentrarnos en lo siguiente:
- Reduzca el tiempo que tarda el GC en ejecutarse
- En el hilo principal , no hagas mucho.
- Use hilos alternativos e hilos en Android .
Los pasos para aumentar el rendimiento incluyen
- Utilice ArrayMap y SparseArray. Esta publicación explicará por qué y cuándo debe utilizar ArrayMap y SparseArray para mejorar sus aplicaciones de Android.
- No asigne un objeto demasiado pronto; en su lugar, asigne un objeto solo cuando sea necesario. Hacer uso de la inicialización diferida.
- Si un objeto no es necesario, no debe asignarse.
- El trabajo pesado debe mantenerse alejado del hilo principal. Ponlo en el hilo de fondo.
- Para evitar la rotación de memoria, emplee la idea de grupos de objetos. Obtenga más información sobre el grupo de mapas de bits haciendo clic aquí.
- Evite el uso de Auto-Boxing como Integer, Boolean, etc. consumen más memoria ya que las clases como Integer consumen más memoria, por lo tanto, use int siempre que sea posible en lugar de Integer.
- Para constantes, use final estático
- Cuando sea posible, evite usar getters/setters internos (el acceso directo al campo es 3 veces más rápido)
- Los contextos no deben filtrarse en las clases internas.
- Use clases internas estáticas sobre clases internas no estáticas.
- Para minimizar la decodificación de mapas de bits duplicados, utilice la memoria caché LRU para el mapa de bits; esto reduce las llamadas de GC repetidamente.
- En Desarrollo de Android, use StrictMode para encontrar cosas que realizó por accidente, como un disco involuntario o acceso a la red o consulta de base de datos en el subproceso principal de la aplicación.
- Usar perfiles de representación de GPU: proporciona una representación visual instantánea de cuánto tiempo se tarda en dibujar los marcos de una ventana de interfaz de usuario en comparación con el punto de referencia de 16 ms.
Finalmente, evite asignar un número excesivo de objetos.
Publicación traducida automáticamente
Artículo escrito por therebootedcoder y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA