Android es un sistema operativo con multitarea, permite ejecutar varias aplicaciones al mismo tiempo. Los desarrolladores que vienen de una plataforma diferente puede encontrar un cambio llamativo al aplicar este concepto. A la hora de comenzar a desarrollar una aplicación de Android, es necesario comprender su funcionamiento para poder integrarlo lo mejor posible, aquí hablaremos del diseños, de las características, del uso y de su desarrollo, según lo explicado por la ingeniera de Google Dianne Hakborn:

Los dispositivos móviles tienen limitaciones técnicas que no tienen los sistemas de escritorio o en la web. En este artículo se explican las cuatro claves en las que se pensó para diseñar la multitarea en Android.

Los dos primeros requisitos son algo contradictorios. Se quiso que el usuario no tuviese que preocuparse por cerrar la app, que pareciese que siempre estaban funcionando. Al mismo tiempo, los dispositivos móviles tienen límites estrictos en el uso de la memoria, de modo que un sistema se degrada, o incluso empiezan a fallar muy rápidamente, ya que necesita más memoria RAM . Un equipo Desktop por el contrario simplemente baja el ritmo de intercambio con el espacio swap. Estas consideraciones fueron clave para  la implementación de Android.

 

El ciclo de vida en Android

El error fundamental cuando hablamos de multitarea en Android es no diferenciar entre un proceso y aplicación. En Android no son entidades estrechamente unidas: varias aplicaciones pueden compartir procesos, o una aplicación puede hacer uso de múltiples procesos en función de sus necesidades.

El hecho de que se puede ver el proceso de una aplicación «en ejecución» no significa que la aplicación se está ejecutando o haciendo cualquier cosa. Puede ser simplemente que el sistema operativo así lo decida por distintas razones, y ha decidido tener alrededor por si lo necesita pronto. Del mismo modo, puede dejar desactivada una aplicación para un poco después volver a ella donde la dejó.

Una de las claves de cómo maneja las aplicaciones Android es saber qué hace cuando un proceso no se cierra limpiamente. Cuando el usuario sale de una aplicación, el proceso se mantiene en segundo plano preparado para volver a ejecutarse (por ejemplo la descarga de páginas web), si es necesario, y de manera inmediata puede volver a primer plano. Si no se queda sin memoria, todos los procesos se quedarán en suspensión.
Por supuesto, hay una cantidad limitada de memoria, y el sistema operativo debe decidir cuándo deshacerse de los procesos que no son necesarios. Esto es lo que se llama  «el ciclo de vida de Android«, el conjunto de reglas que deciden que proceso debe eliminarse. Estas reglas se basan tanto en la importancia de un proceso, según la experiencia actual del usuario, así como el uso que se le ha dado basado en estadísticas anteriores.

Una vez que Android determina la necesitad de eliminar un proceso, sólo hay que matarlo. El núcleo puede recuperar de inmediato todos los recursos necesarios para el nuevo proceso, sin necesitar que la aplicación este bien escrita y que responda correctamente a la orden de salir. El sistema operativo coge el control para que no se produzcan fallos de memoria.

Si un usuario reactiva una aplicación que había sido matada, Android tiene mecanismos para poner en marcha en el mismo estado anterior, para preservar el concepto de «todas las apps se están ejecutando todo el tiempo». Esto se hace mediante la restauración de los datos visibles por el usuario, las Activity (una activity es la pantalla que vemos en primer plano cuando ejecutamos una aplicación). Este último estado se genera cada vez que el usuario sale de la app, no cuando se le ha hecho kill, por lo que el núcleo más adelante puede libremente matarlo sin depender de la aplicación.

En cierto modo,el gestor de procesos puede ser visto como una forma de swap: los procesos de aplicación representan una cierta cantidad de memoria en uso, cuando queda poca memoria, algunos procesos pueden ser matados, y cuando esos procesos se necesitan otra vez, pueden ser iniciados desde su último estado guardado

Ejecución en Segundo plano

Hasta el momento, ya sabemos como se utilizan de forma implícita las apps en segundo plano. Esto está bien para completar descargas por ejemplo, pero ¿qué ocurre cuando necesitamos decirle al sistema operativo de forma explícita que se debe usar en background?. Intercambio de datos, gps, reproducción de música…

La app debe tener algunas formas de decirle a Android: » tío, sin llamar la atención» . Hay dos mecanismo esenciales para las aplicaciones en background representados por dos tipos de componentes que se pueden nombrar en su manifiesto (de este hablaremos otro día) explícitamente: broadcastreceivers y  services.

BroadcastReceiver

Un BroadcastReceiver permite una aplicación se ejecute, por un breve período de tiempo, en segundo plano como consecuencia de algo que está ocurriendo. Se puede utilizar en muchas maneras de construir instalaciones de mayor nivel: Por ejemplo LocationManager puede enviar un mensaje cuando detecta cambios interesantes en una determinada ubicación. Dado que la información sobre el receptor forma parte del manifiesto (manifest.xml) de una aplicación, Android puede encontrar y ejecutar la aplicación, incluso si no se está ejecutando y de forma muy eficiente.
Cuando se maneja una «recepción», la aplicación se da una cuota de tiempo para terminar. Si no se completa en ese tiempo, la aplicación se considera que se porta de forma inapropiada, y su proceso pasa la suspensión.

Es una forma que tiene la app de decirle al  sistema operativo: «Termino en 10 segundos«.

En definitiva, se utilizan cuando detecta un estímulo externo. En cualquier caso, no son apropiados para transmisiones de mucho tiempo, tales como las redes.

Servicios

Un servicio permite a una aplicación práctica a más largo se ejecutan operaciones en segundo plano. En realidad, hay un montón de otras funciones que proporcionan los servicios, pero  aquí su propósito fundamental es una aplicación para decir «tío, voy a estar aquí un buen rato, ya te aviso cuando termine» Una app controla a su servicio. Dice cuando se ejecuta y cuando se detiene.

Los servicios no proporcionan un buen modelo cliente-servidor, su uso es opcional. Al iniciar los servicios de una aplicación, Android, simplemente crea una instancia del componente en el proceso de la aplicación para ofrecer su contexto.
La gestión de procesos para los servicios es diferente a los BroadcastReceiver, ya que un número ilimitado de servicios puede solicitar que se ejecuta por un  tiempo desconocido. Puede que no haya suficiente memoria RAM para tener en ejecución el servicios, así que no hay garantías de que se complete con éxito.

Si hay poca RAM, los servicios será inmediatamente matados como procesos en segundo plano son. Sin embargo, en su caso, Android puede  reiniciar su proceso más tarde, cuando haya más memoria RAM disponible.

De forma coloquial se puede decir que los services siempre están en plan «llorica» diciendo «no quiero morir» y Android para no matarlo (en caso de necesidad de RAM) quiere ver que existe interactuación con el usuario, por ejemplo cuando se ejecuta música de fondo, Android sabe que el usuario conoce la existencia de ese proceso gracias a la barra de notificaciones que se puede ver el reproductor y por tanto no intentará matarlo.

Las Smart TV son tendencia. Eso es algo que nadie puede negar. Las previsiones indican que para 2017 este sector terminará acaparando un buen segmento del mercado de las aplicaciones móviles, se espera que lleguen a las 2,2 millones de unidades vendidas. En países como Japón, la penetración de este tipo de televisores supera el 60% de los hogares. El precio de estos televisores va en caída libre y el número de aplicaciones crece de forma exponencial. Las grandes empresas de internet ya tienen las suya: Twitter, Facebook, Skype, Spootify, Google  y muchas otras empresas como periódicos digitales, plataformas de cine online, banca online … y cada día se van añadiendo nuevas al ya extenso catálogo de aplicaciones.

Partiendo de esta realidad, son muchas las compañías que ya han empezado su andadura por el camino del desarrollo para esta plataforma. Ven en este dispositivo la opción de llegar al gran publico ya que actualmente el abanico de este tipo de aplicaciones es escaso y ven fácil agarrarse al filón del pionero. El carácter familiar que inspiran las Smart TV también es un punto interesante a explotar ya que se pierde el perfil individualista de las aplicaciones para smartphone. Cuando se habla de un dispositivo móvil como puede ser cualquier SmartPhone o tablet, hablamos de un dispositivo más bien de uso individual, por lo que el carácter u orientación que deben tener las aplicaciones viene determinado por dicha premisa. En el caso de las aplicaciones para Smart TV este ámbito se expande tocando a todo el núcleo familiar, por lo que la naturaleza de las aplicaciones de este sector deberían tender a formar parte del día a día en una casa. Otro de los puntos que las empresas que empiezan a abrirse camino en este sector quieren explotar es el de la calidad de las aplicaciones. En la mayoría de los casos, las aplicaciones actuales disponibles al gran publico dejan mucho que desear, o bien no cumplen con las expectativas puestas en ellas, o simplemente no funcionan. Con todo esto se puede determinar que se abre un enorme nicho de mercado por tomar. Todas las empresas que buscan o han buscado estar presentes en el mundo de la movilidad, deberían tomar el camino de las Smart TV. En Sozpic ya estamos preparados para guiarte en este camino, por ello ofrecemos el servicio de desarrollo de aplicaciones para Smart TV en las principales plataformas.  Podemos desarrollar Apps sincronizadas (TV+Mobile) / Second Screen,  e-commerce, Catch up TV para medios de comunicación.

 

 

 

Un nuevo mundo se abre… ¿Alguien da más?

Todos conocemos la limitación que tiene Apple para distribuir una aplicación ios en un grupo limitado. La política de Apple es o se distribuye a través de App Store o la puedes probar en un pequeño grupo de gente en un tiempo muy limitado. Cuando se quiere distribuir una aplicación en un grupo limitado de usuarios (normalmente una organización u empresa) se utiliza la cuenta «iOS developer enterprise program«

Es una solución perfecta para distribuir aplicaciones in-house para empresas. Gracias a este programa se evita la validación de Apple y el posible rechazo debido al incumplimiento de alguno de los requisitos de la App Store.

Para poder acceder al programa enterprise de Apple, debe ser una empresa quien solicite esto y ademas debe tener un identificador D-U-N-S (Una id internacional de empresa). Es imprescindible.

No se puede distribuir la aplicación a personas ajenas a la organización ya que es una de las exigencias de Apple.

Una vez tramitados todos los pasos para la suscripción de este programa, se podrán distribuir apps de forma «libre» vía OTA mediante una de las opciones que proporciona Xcode «Save for Enterprise Distribution». Se solicitan una serie de datos y esto genera ademas del archivo IPA, un archivo descriptor PLIST.

Es de todos conocido el control que ejerce Apple sobre las aplicaciones de su App Store. Lo que tiene que ver con la usabilidad, experiencia de usuario y contenido relevante es revisado con detenimiento, siendo corregido o rechazado en caso de incumplir alguna directriz. Ya se ha hablado en este blog sobre el proceso de aceptación de aplicaciones de Apple, en este caso se hablará sobre otro aspecto que Apple intenta controlar sin mucho éxito: el marketing y la publicidad de las aplicaciones que se publican en App Store.

En este artículo se van a exponer las directrices de Apple para utilizar su marca de una forma correcta. No vamos a poner todas porque son muchas, sólo destacaremos las más llamativas.

Introducción

Ya en la introducción lo deja claro, como si del artículo 1 de la constitución se tratara :

«Importante: Es necesaria la aprobación de Apple. Apple debería aprobar todos los materiales en vídeo, impresos o en cualquier otro formato que tenga una visibilidad antes de la difusión o publicación, tanto para marketing como para publicidad. Envía tu concepto inicial o versión final por email de la forma descrita a continuación. La respuesta tardará unos siete días hábiles, el hecho de no recibir respuesta por parte de Apple en este periodo no significa que los materiales hayan sido aprobados. Puedes enviar a Apple materiales en fase de desarrollo para su revisión, pero las versiones finales deberán ser aprobadas por Apple antes de su difusión o publicación.

Sobre el distintivo de Apple y Apple Store. No debes usarlo en las siguientes situaciones:

Normas Apple balnco

Uso de productos. No debes usarlo en las siguientes situaciones:

publicidad ios

Sobre el Icono de Apple Store. No debes usarlo en las siguientes situaciones

Conclusión

Apple quiere dar la sensación de control, no sólo del negocio de las aplicaciones móviles. También en la forma que se expone su marca en cada una de ellas cuando es poco menos que imposible. En cualquier caso, sirven más bien como recomendaciones a la hora de diseñar una campaña de marketing para una nueva aplicación móvil. El marketing móvil es algo que en los próximos meses dará mucho que hablar.

Hoy en día, nadie duda de la utilidad de Google Analytics en el mundo del Marketing Online. El administrador de la web ha podido conocer mejor el perfil del usuario que le visita, segmentar, controlar el tráfico y hasta mejorar la usabilidad de su web. Se han creado muchas profesiones alrededor de esta herramienta, como el de SEO manager, UI engineering. En el mundo offline, recabar estos datos cuesta millones de euros y casi siempre se basan en lejanas aproximaciones o estadísticas.

Google Analytics nació en el año 2005, revolucionando el mundo de las estadísticas web. Por razones desconocidas, los departamentos de Marketing en España y Latinoamerica tardaron muchos años en adquirir esta poderosa herramienta, siendo ya entonces la web un elemento esencial para la comercialización de productos y servicios.

Hoy, está ocurriendo exactamente lo mismo, las aplicaciones móviles son un elemento importantísimo en el marketing de muchas empresas, su finalidad comercial es casi ilimitada y no se hace nada para controlar las interacciones del usuario, ni como maneja la información. Las opciones que se ofrecen en móviles son muy similares a la que se ofrecen en la web.

En efecto, existe Google Analytics para aplicaciones móviles desde el 2011, tanto para iOS como para Android. Una herramienta potentisima que Sozpic integra en aplicaciones en las que conocer al cliente, sus preferencias, y la forma de interactuar es fundamental. No hay que confundir Google Anaytics para aplicaciones móviles con la aplicación móvil de Google Analytics, la cual salió hace unos meses y simplemente controla los datos que obtiene de Analytics, sea web o móvil. Tampoco hay que confundirlo con las estadísticas que te ofrece Google Play en la consola de desarrollador, ya que esta sólo hace referencia a las aplicaciones descargadas.

Nuevo Mobile App Analytics

El nuevo Mobile App Analytics está diseñado para medir todo el ciclo de vida de la aplicación móvil (desde que el usuario descubre la app hasta que la desinstala). Esto permite la creación de experiencias de usuario que son más útiles e interesantes a través de decisiones basadas en datos sacados en cada etapa del ciclo de vida de la aplicación:

 

A continuación veremos las secciones estarán disponibles en los nuevos informes, pero solo estarán disponibles para aplicaciones que utilizan el  SDK v2.0.

Mobile app analytics analytics users

Usuarios nuevos y activos : Muestra el número de usuarios nuevos y activos que tiene la app, así como la cantidad de gente que la borra.

 

google play analytics

 

Fuentes de Tráfico : Muestra los visitantes que vienen de Play Google, de otros mercados de apps paralelos o de campañas de publicidad como admob. Con la que hay una estrecha relación (otro día escribiré sobre la nueva admob)

Distinta información sobre el dispositivo móvil: Podrás obtener datos como el modelo de dispositivo que usan, la versión del sistema operativo, la resolución de pantalla que usan, el idioma en el que está configurado. Además de la frecuencia con la que se utilizan. Datos que te permiten conocer mejor a tu usuario potencial.

 

 

Comportamiento de los usuarios : Al igual que Analytics orientado a la web, se puede comprobar el ratio nuevos usuario-usuarios recurrentes, además dela frecuencia con que utilizan la aplicación, el nivel de participación de cada grupo segmentado. Esta nueva visualización es muy interesante y útil, ya que muestra de un vistazo la lealtad de losvisitantes y cómo interactuar con la aplicación.

 

 

mobile loyalty analytics

Flujo  : Nos muestra las pantallas y los caminos que usan los usuarios al utilizar aplicaciones. Hay diferencias con el Analytics de la web, por ejemplo se usan diferentes colores para representar diferentes interacciones.

 

mobile engagement flow

 

Bugs: Se podrán detectar bugs y en qué momento ocurren. Esto es algo muy útil para el desarrollador ya que le permite saber exactamente dónde está el problema.

mobile crashes exceptions analytics

 

App ecommerce : Muestra el número de compras y los ingresos generados por las compras en la app. Utilidad que dará un empujón a las tiendas online en aplicaciones móviles. Lástima que a pesar, de Admob está integrado por anunciantes (es decir, pueden ver el tráfico que viene como resultado de sus anuncios), todavía no está integrado por editores (es decir, un sitio web que muestra anuncios en su aplicación móvil no se puede saber cuando un anuncio se hizo clic).

 

app analytics outcomes

En resumen, este es un cambio importante en la oferta de Google Analytics. Google está apostando fuerte por el móvil. Se van dando pasos hacia una optimización de la experiencia móvil. Google ya ha emitido su «guía de estilo para móvil» previendo lo que será el SEO para móviles.

 

 

 

 

Si damos una visión fría de lo que es Android, es un conjunto de software para dispositivos móviles que incluye un sistema operativo, middleware y aplicaciones clave. El SDK de Android proporciona las herramientas y APIs necesarias para empezar a desarrollar aplicaciones en la plataforma Android usando el lenguaje de programación Java.

 

La memoria en Android

 

Como hemos dicho más de una vez, Android es un Sistema operativo basado en Linux con el kernel 2.6.x, simplificada para manejar la mayoría de tareas . Utiliza bibliotecas nativas en C abiertas. Todas las operaciones básicas del sistema operativo como de E / S, gestión de memoria, y así sucesivamente, son manejados por el de kernel de Linux.

La gestión de memoria es bastante común. Al igual que Java y NET., Android utiliza el entorno de ejecución y la máquina virtual para gestionar la memoria de la aplicación. A diferencia de cualquiera de estos dos marcos, el entorno de ejecución de Android también maneja los tiempos de vida del proceso. Android asegura la respuesta de la aplicación, deteniendo y matando a los procesos que obstaculizan la fluidez y  libera recursos para las aplicaciones de mayor prioridad.

 

Cada aplicación Android se ejecuta en un proceso independiente dentro de su propia instancia de Dalvik, renunciando a toda responsabilidad de la memoria y la gestión de procesos.

 

Dalvik y el entorno de ejecución de Android se posicionan en la parte superior de un núcleo de Linux que se encarga de la interacción de bajo nivel del hardware, incluyendo los drivers y la gestión de memoria, mientras que el conjunto de API proporciona acceso a todos los servicios de bajo nivel, características y hardware.

 

Dalvik Virtual Machine es una máquina virtual basada en registros que ha sido optimizada para asegurar que un dispositivo puede ejecutar múltiples instancias de manera eficiente. Se basa en el kernel de Linux para la gestión de memoria de bajo nivel.

 

La máquina virtual Dalvik

 

Uno de los elementos clave de Android es la máquina virtual de Dalvik. En lugar de utilizar una tradicional máquina virtual Java (VM), tales como Java ME (Java Mobile Edition), Android utiliza su propia máquina virtual personalizado diseñado para asegurar que la multitarea se ejecutan de manera eficiente en un único dispositivo.

La máquina virtual Dalvik utiliza el dispositivo del kernel de Linux subyacente para manejar bajo nivel de funcionalidad, incluyendo la seguridad,la planificación de procesos, y la gestión de la memoria.

Todo el hardware de Android y acceso a los servicios del sistema se gestiona mediante Dalvik como un nivel intermedio. Mediante el uso de una máquina virtual para organizar la ejecución de aplicaciones, los desarrolladores tienen una capa de abstracción que asegura que nunca tendrá que preocuparse de una aplicación de hardware en particular.

La máquina virtual Dalvik lanza procesos ejecutables Dalvik, un formato optimizado para asegurar la mínima huella en la memoria . Los ejecutables. Dex se crean mediante la transformación de las clases de Java lenguaje, compilado utilizando las herramientas proporcionadas en el SDK.

 

Prioridad de procesos

 

El orden en que los procesos para reclamar los recursos está determinada por la prioridad de las aplicaciones almacenadas. Una prioridad de aplicación es igual a prioridad más alta de sus componentes.

Cuando ambos procesos son igual de largos, los dos tienen la misma prioridad, el proceso que ha tenido una prioridad más baja se mató en primer lugar. La prioridad del proceso también se ve afectada por las dependencias entre procesos, si una aplicación tiene una dependencia en un servicio o proveedor de contenidos suministrados por una segunda aplicación, la aplicación de secundaria tendrán al menos una prioridad tan alta como la aplicación que da soporte.

Todas las aplicaciones Android se mantendrá en funcionamiento y en la memoria hasta que el sistema necesitara de sus recursos para otras aplicaciones.

 

Es importante asegurarse que la  prioridad del proceso es apropiada para el trabajo que está haciendo. Si no fuese así, el proceso podría ser matado mientras está en medio de algo importante.

 

Tipos de procesos ordenados por su prioridad:

 

– Procesos Activos

Los procesos activos o en primer plano, son con los que existe una interacción con el usuario. En general, hay pocos procesos en un mismo periodo de tiempo, y se matan sólo como último recurso.

 

Procesos activos incluyen:

 

-Las Activity’s en un estado «activo», es decir, que están en primer plano y responden a eventos de usuario.

-Actividades, Servicios, o  receptores que se está ejecutando actualmente un controlador de eventos OnReceive.

-Los servicios que se están ejecutando OnStart, onCreate o con el controlador de eventos OnDestroy.

 

– Procesos Visibles

Como el nombre sugiere, las actividades visibles son visibles, pero no son en primer plano o de responder a eventos de usuario. Esto ocurre cuando una actividad se muestra parcialmente (una pantalla que no está completa o transparente). En general, existen muy pocos procesos visibles, sólo se matan en circustancias extremas para permitir que los procesos activos continuen.

Respecto a los servicios, los que dan soporte a procesos activos que están en ejecución se le da una prioridad sensiblemente inferior a los mismos que los servicios no interactúan directamente con el usuario.

 – Procesos en segundo plano.

Los procesos en segundo plano engloban a las actividades que no son visibles y están en ejecucuón.  No será en general un gran número de procesos.

center

– Procesos vacíos

Los Procesos vacíos se utilizan para mejorar el rendimiento general del sistema, a menudo Android retiene aplicaciones en la memoria después de haber llegado al final de su vida.  Se mantiene esta memoria caché para mejorar el tiempo de respuesta de las aplicaciones al arrancarse.

Cómo utilizar la memoria de manera eficiente

 

Android gestiona las aplicaciones abiertas que se ejecutan en segundo plano. Esto significa que cierra las aplicaciones cuando el sistema necesita más memoria, de forma que no sea necesario desde la memoria secundaria. Sin embargo, la mayoría de los usuarios de Android no están muy satisfechos con la forma en que se gestiona porque a veces deja demasiados procesos en ejecución que provoca la ya conocida lentitud respecto a ios (iPhone, iPad…).  Para solucionarlo, siempre podemos usar un task killer