Reporte Perfilamiento App - gorozcoua/team18 GitHub Wiki
📊 Informe de Perfilamiento de Aplicación – Proyecto: Vinilos
Fecha de Análisis: 5 de mayo de 2025
Dispositivo de Prueba: Pixel 7 – Android API 36
Herramientas Utilizadas: Android Studio Profiler (CPU, Heap Dump, Native Memory)
Nombre del Proyecto: vinilos
1. 🔍 Análisis de Uso de CPU
✔ Metodología
Se utilizó la herramienta "Find CPU Hotspots" para detectar métodos de Java/Kotlin con mayor uso de CPU durante la ejecución normal de la aplicación.
📌 Observaciones Principales
- Carga constante en el hilo principal (
main), con múltiples picos de procesamiento. - El método
loopOnce()delLooperdestaca con 58,813,747 μs, lo que indica procesamiento repetitivo o tareas pesadas en el hilo de la UI. - Métodos como
nextLegacy(),nativePollOnce()ydispatchMessage()también muestran alta actividad. dispatchMessage()consume el 51.33% del tiempo hijo deloopOnce(), lo cual revela que los mensajes/callbacks en la UI son costosos.
✅ Recomendaciones
- Revisar qué tareas se ejecutan en los
Handlerso callbacks de UI. - Externalizar operaciones pesadas del hilo principal usando
Coroutine,ExecutorService, oWorkManager. - Usar herramientas como
StrictModepara identificar operaciones bloqueantes.
2. 🧠 Análisis de Memoria Nativa
✔ Metodología
Se usó el perfilador de "Native Allocations" para rastrear el consumo de memoria en procesos gráficos y nativos.
📌 Observaciones Principales
- El hilo
android.ui.renderthread.RenderThreadmuestra uso intensivo de memoria nativa. - Actividad frecuente de métodos como
CanvasContext::draw(),GrDirectContext::flushSurfaces()y funciones de OpenGL (glBufferData). - Alta asignación de memoria a través de
malloc,operator new, y elementos de Skia (SkDrawable,SkCanvas,GrRenderTask). - Indicios de dibujado excesivo o poco optimizado en la UI.
✅ Recomendaciones
- Evitar redibujos innecesarios, revisando llamadas a
invalidate()orequestLayout(). - Optimizar el uso de
Canvas,Bitmapy otras operaciones gráficas. - Utilizar bibliotecas como Glide o Coil para gestión de imágenes eficiente.
3. 🗃 Análisis de Heap Dump
✔ Metodología
Análisis realizado mediante Heap Dump en tiempo de ejecución, usando agrupación por clase.
📌 Observaciones Principales
| Clase | Retained Size | Instancias |
|---|---|---|
EmojiCompat |
352,389 bytes | 1 |
MaterialButton |
12,493 bytes | 66 |
MaterialTextView |
11,193 bytes | 64 |
RecyclerView |
11,197 bytes | 10 |
LinearLayout |
9,639 bytes | 96 |
CardView |
9,505 bytes | 9 |
EmojiCompatocupa una cantidad significativa de memoria retenida, aunque solo tiene una instancia.- Varias vistas (
MaterialButton,TextView,RecyclerView,LinearLayout) tienen un peso considerable.
✅ Recomendaciones
- Evaluar si
EmojiCompates necesario. Considerar desactivarlo si no se utiliza. - Reducir el uso de layouts anidados: optar por
ConstraintLayout. - Utilizar
ViewStuboincludepara mejorar eficiencia. - Optimizar adaptadores y vistas reciclables como
RecyclerView.
4. 📌 Conclusiones Generales
| Aspecto Analizado | Resultado / Estado | Recomendaciones |
|---|---|---|
| Hilo Principal (UI) | Saturado con tareas repetitivas | Mover lógica pesada a hilos secundarios |
| CPU | Consumo elevado en dispatchMessage() |
Revisar callbacks registrados |
| Memoria Nativa | Carga alta en RenderThread y Skia | Optimizar renderizado gráfico |
| Heap Dump | Uso ineficiente de vistas y componentes | Minimizar layouts anidados y vistas innecesarias |
🛠 Herramientas y Buenas Prácticas Recomendadas
StrictMode: para detectar operaciones de I/O en el hilo principal.Memory Profiler: para seguimiento en tiempo real del uso de memoria.Systrace/Perfetto: para visualizar cuellos de botella en ejecución.LeakCanary: para detección automática de fugas de memoria.