Optimizar una app: un caso práctico

Como NO abrir pantallas con App Inventor

Una de las cuestiones más comunes con las que nos enfrentamos cuando comenzamos a trabajar con App Inventor es desarrollar una aplicación multipantalla con muchas imágenes y ficheros de audio.

 

Por lo general, el programador novato tiene en la cabeza muchas ventanas, a veces innecesarias, con recursos gráficos y de audio que ocupan mucho espacio al no estar optimizados.

 

Hablamos casi siempre de aplicaciones que:

  • Se detienen "sin motivo aparente"
  • Devoran la memoria del dispositivo abriendo una pantalla tras otra sin cerrar la anterior
  • No son capaces de generar el fichero APK por exceso de tamaño del proyecto
  • Utilizan múltiples pantallas exactamente iguales que lo único que hacen es cambiar la imagen de fondo y poco más.

En este caso es donde nos situamos. Para ello os presento una aplicación desastrosa que nos mostrará los principales defectos anteriores... Por un lado contaremos con audios e imágenes de gran tamaño y por otro, iremos abriendo pantallas y reproduciendo audios sin cerrar las anteriores... En el siguiente enlace puedes descargar nuestra aplicación no optimizada con todos sus recursos para que comprendáis mejor lo que no se debe hacer:

¿Problemas? Al abrir las pantallas no vamos cerrando las que tenemos abiertas... nuestros recursos son pesados...todas las pantallas son iguales salvo el fondo y/o algún botón que la hace diferente..en definitiva que algún momento la app se podría romper dependiendo de la memoria del dispositivo o simplemente la plataforma no nos deja generar el APK porque supera el tamaño máximo permitido.

 

¿Cuándo es necesario realmente una pantalla diferente?

Lo primero que tenemos que tener claro es que nos estamos refiriendo al componente Screen.

Debemos hacernos esta pregunta principalmente porque "a nivel interno" el abrir una nueva pantalla consumirá recursos de memoria principalmente en el dispositivo y el tener varias abiertas a la vez sin cerrarlas puede revertir en un consumo de memoria excesivo por la carga de recursos.

 

Aunque nuestra app tenga pantallas con apariencias diferentes, éstas algunas veces son ligeras variaciones unas de otras lo que nos debería llevar a plantearnos que quizás haciendo uso de la misma Screen y disposiciones que se muestran/ocultan y/o cambiando el fondo de una pantalla bajo determinadas circunstancias podemos obtener el mismo resultado y no tenemos porqué crear un nuevo componente Screen.

Administrador de pantallas(Manager Screen)

Si, por comodidad o por necesidades reales de la app, tenemos que usar componentes Screen diferentes... uno de los "trucos" es utilizar lo que se conoce como un administrador de ventanas(Manager Screen)

 

La idea es realmente simple: nunca tendremos más de dos ventanas abiertas, la principal(Screen1) y en la que estemos trabajando. Cuando la app requiera abrir una nueva ventana, en lugar de usar el bloque tradicional, cerraremos la ventana "activa" devolviendo una cadena a Screen1 con el nombre de la nueva ventana que queremos abrir y será la principal la que se encargue de abrir la siguiente ventana; de esta manera tan sencilla nunca tendremos más de dos ventanas reduciendo considerablemente el consumo de memoria.

 

En Screen1 capturamos el evento del cierre de otra pantalla

...y en las otras pantallas

El tamaño importa

El problema de las imágenes y los audios se resuelve de manera sencilla si utilizamos formatos optimizados. En el caso de las imágenes lo ideal es utilizar JPG o PNG optimizados, nunca el formato BMP... y en el caso de los audios, salvo excepciones, usar ficheros MP3 con menor tamaño.

 

Las imágenes las podemos hacer más ligeras reduciéndolas de tamaño y/o calidad con cualquier programa de retoque tipo Photoshop o GIMP. Si no disponemos de estos programas o simplemente queremos hacerlo "sin complicaciones", en sitios webs como Image Online Convert podremos convertir a JPG y en TinyPNG podremos optimizar estos formatos.

 

Para el caso de los ficheros de audio, de nuevo podemos recurrir a software de edición como Audacity para convertir el formato, comprimirlos o bajarle un poco la calidad o utilizar uno de los servicios en línea como pudiera ser Media.io o MP3Smaller

 

El resultado, es que nuestra app de 10,3MB en formato AIA se nos queda optimizada en 2,2MB y sin crashear!! ¿No es genial?

Saludos y happy inventing!!!

 

Jose Luis Núñez

@twajoseluis

 

Escribir comentario

Comentarios: 1
  • #1

    Jonny​ (lunes, 28 agosto 2017 03:04)

    Hola