18 de marzo de 2016

¿Qué son las apps híbridas?

Las aplicaciones móviles híbridas son aplicaciones desarrolladas con un conjunto de tecnologías comunes en la web como HTML, Javascript y CSS. Estas aplicaciones corren sobre un motor nativo que se encarga de mostrar el contenido visual de las mismas a través de una vista web y de comunicar al hardware del móvil con la app.

De cara al usuario las apps híbridas son iguales que las nativas, un usuario normal no va a saber diferenciarlas, de hecho le da igual, lo que quiere es que la aplicación funcione bien. Están en todas las tiendas de apps de móvil, las hay de todo tipo: juegos, periódicos, de fotografía, etc.

 Las aplicaciones híbridas se suelen crear de una manera similar a una página web, de hecho, funcionan sobre un navegador web a pantalla completa. Para crear una aplicación híbrida tienes que sentirte como pez en el agua con HTML, CSS y sobre todo con Javascript.

La mayoría de las aplicaciones híbridas están desarrolladas a día de hoy para Apache Cordova (o Phonegap, que es una distribución comercial con herramientas adicionales). Cordova tiene un sistema de plugins con una API que permite interactuar con tecnologías nativas de Android, iOS, Windows Phone, etc. Estos plugins son desarrollados por la comunidad y también pueden ser mixtos para varios tipos de tecnología móvil.

Apache Cordova es un entorno basado en línea de comandos por lo que no trae herramientas por defecto para editar un proyecto, lo bueno es que puedes editar el proyecto desde cualquier editor común de texto.

¿Por qué se usan las tecnologías híbridas? 
  • Pues en primer lugar porque HTML es una tecnología muy accesible que conocen casi todos los programadores del mundo. Es muy raro encontrar a algún profesional que no sepa moverse con el HTML.
  • En segundo lugar debido al ahorro de costes y de tiempo, con tecnología nativa tienes que hacer la aplicación casi de 0 para cada plataforma, con tecnología híbrida basta con desarrollar la app y luego compilarla para cada versión de móvil.
  • En tercer lugar por una cuestión de facilidad de mantenimiento, no es lo mismo mantener 3 versiones de un producto que mantener una, la posibilidad de errores se divide por 3 ^_^.
¿Y por qué no se usan siempre las tecnologías híbridas? 
  • Pues en primer lugar porque son más lentas que las nativas, al ejecutarse sobre navegador web cualquier tarea gráfica, o de acceso a los sensores del dispositivo será mucho más lenta ya que tiene que pasar por más capas.
  • En segundo lugar hay que tener en cuenta que tienen siempre un tiempo de retraso en adaptarse a la última versión de la plataforma nativa, por ejemplo cuando aparece la primera versión de prueba de Android la plataforma híbrida tardará algo en estar disponible para esa versión.
  • En tercer lugar porque no siempre consiguen lo que prometen en cuanto a la consistencia en tiempo de ejecución. Cada navegador de cada móvil es un mundo y no todos ejecutan igual javascript o muestran igual los CSS.
  • Y hay una cuarta razón, aunque esta no es culpa de la tecnología híbrida en sí, si no de los clientes que solicitan la tecnología híbrida para… embeber su web en una app. Apple rechazará cualquier app que sólo sea una web convertida, advertidos estáis ☺

15 de marzo de 2016

Android: El ciclo de vida de una Activity

Las actividades en Android pueden tener diferentes estados. Podemos detectar su estado desde java para ejecutar el código que consideremos conveniente en cada momento de su ciclo.

Os pongo (y me pongo) aquí un ejemplo de referencia rápido de las diferentes situaciones.

Desde onStart a onStop la actividad es visible en pantalla.

  • onCreate se ejecuta cuando se crea la actividad.
  • onStart se ejecuta a continuación de onCreate una sola vez.
  • onRestart se ejecuta cuando ejecutamos la actividad después de volver de onStop.
  • onResume se ejecuta cuando el usuario vuelve a interactuar con la pantalla en primer plano.
  • onPause se ejecuta cuando la aplicación entra en pausa al no estar en primer plano.
  • onStop se ejecuta cuando se sale de la aplicación pero continúa en segundo plano
  • onDestroy cuando se cierra la aplicación


public class MainActivity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();

     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }