Meetup#15 — Mayo 2018

Jonathan Nolasco
AndroidDevPeru
Published in
5 min readMay 9, 2018

Iniciamos la temporada 2018 con el Meetup #15 de la comunidad Android Dev Perú.

1. Detectar leaks de memoria con Leak Canary

En esta oportunidad nos acompañó Manuel Pérez Corrales quien nos habló sobre los leaks de memoria, cómo se originan y como detectarlos para evitar un posible ARN.

Cómo sabemos los memory leaks son errores asociados al manejo de espacios en memoria. Estos espacios de memoria pueden quedar relegados durante la ejecución de nuestra aplicación y eventualmente ser usados por mantener alguna conexión con variables definidas lo que dará como resultado el temido OutOfMemoryError Exception, dado que dicho bloque de memoria debió ser liberado y con ella todas sus referencias.

De hecho la forma de prevenir este problema es entendiendo cómo se generan y crear una buena práctica de desarrollo orientada a optimizar la asignación de recursos a bajo nivel.

En esta oportunidad Manuel nos presentó a Leak Canary como una herramienta que puede ser de mucha ayuda a la hora de detectar y encontrar el origen de dichos leaks.

Su funcionamiento es muy parecido al de un crash report, se agrega como una dependencia en el proyecto y eventualmente se configura en una clase Application.

De esta manera monitorea nuestra aplicación hasta dar con un OutOfMemoryError Exception en dónde mostrará el arbol de referencias para encontrar el origen del problema.

Lo que sigue es leer el report de Leak Canary y resolver el leak de memoria. Tal y como se plantea pinta bien como una herramienta para usarla en la etapa de testing sin embargo como bien menciona Miguel puede ser muy rentable usarla desde el inicio del proyecto para tener al final de tu iteración un entregable libre de leaks o con pocas probabilidades de que está genere dicho error.

2. Tareas en segundo plano en Android Oreo y las nuevas restricciones

Seguidamente inició Jonathan Nolasco hablándonos sobre las nuevas restricciones que plantea Android Oreo sobre las tareas en segundo plano y que posiblemente el nivel de rigurosidad aumente en las próximas versiones tales como Android P.

Android plantea las siguientes restricciones para Android Oreo en adelante:

  • Sobre los Services, la tarea en segundo plano no tendrá prioridad o permanecerá activa si es que no se muestra algún indicio visible que indique la existencia de actividad o en su defecto que alguna aplicación en primer plano tenga relación con los servicios corriendo en segundo plano.
  • Sobre los Broadcasts, solo podrán ser declarados en el manifest los broadcast explícitos permitidos a la fecha y los broadcast implícitos deben ser registrados manualmente en tiempo de ejecución.

Android nos plantea usar los Job Scheduler como alternativa para cubrir el gran vacío que dejarán los Services y Broadcasts, en la práctica un JobScheduler viene a ser un service limitado con cualidades de los broadcast.

Pero está limitación tiene un trasfondo y es el brindar una mejor experiencia de usuario y dar mayor autonomía a los dispositivos que adopten las nuevas versiones del sistema operativo más usado del mundo.

3. Introducción al NDK

Finalmente nos acompañó Jorge Murillo quien nos presentó un proyecto demo dónde utilizó el NDK de Android para incluir código c y c++ en nuestro proyecto.

Cabe recordar que el NDK de Android es una herramienta muy potente que nos permite incluir código c en nuestro proyecto con el objetivo de obtener mayor rendimiento o incluir bibliotecas construidas en los lenguajes mencionados.

En esta oportunidad Jorge nos mostró como usar OpenCV para el procesamiento de imágenes en un proyecto netamente basado en c++ el cual consistía en detectar la cantidad de fichas rojas y azules, esto usando un tratamiento de la imágen en escala de grises y el calculando la proporción de bits disponibles.

Luego se creó un proyecto base en Android Studio que usa la cámara del smartphone, se agregó el mismo código c++ usando la NDK y se aplicó el mismo funcionamiento ya no sobre una imagen del ordenador sino sobre la imagen que detectaba el equipo a través de la cámara.

Si bien OpenCv está disponible para android cómo dependencia nativa está no presenta todas las virtudes de OpenCv en c++.

Es importante mencionar que hacer un procesamiento de imágenes o el procesamiento de un resultado basado en redes neuronales en java tomaría 5 veces más de tiempo que procesarlo con c++ por lo que Jorge nos recomienda hacer uso de la NDK en trabajos de esta envergadura donde el procesamiento matemático resulta pesado y complejo.

Entre sandwiches y cervezas terminamos el primer Meetup del año con temas interesantes para la comunidad y cualquier desarrollador que se desenvuelve en el ecosistema de Android.

Los agradecimientos a Everis por el espacio y el coffe break y por permitirnos compartir una nueva edición del Meetup con la comunidad.

Pueden encontrar el material de las presentaciones en el siguiente link:

https://github.com/Android-Dev-Peru/MeetUp-15

Pueden unirse a nuestro grupo en Facebook para estar al tanto de las próximas ediciones.

--

--

Jonathan Nolasco
AndroidDevPeru

Engineering Manager at Crehana, Software Developer, Blockchain Developer & Tech Entrepreneur