Estados de una actividad en Android

Una Actividad en Android es un componente de una aplicación que muestra contenidos a los usuarios y que permite que éstos interactúen con dicha aplicación. Es lo que podríamos entender como una “pantalla” o un “formulario”, para aquellos que estén acostumbrados a aplicaciones de escritorio, o una “web” para los que estén más familiarizados con los entornos web.

Una cosa que debe quedar clara antes de seguir es que una actividad NO es una tarea, sino que una tarea se compone de actividades. Por otra parte, una actividad tampoco es un proceso, a pesar de las analogías que puedan existir entre los estados de una actividad y de un proceso al uso. Aquí no hablaremos de tareas ni de procesos, sino de actividades.

En esta guía de aprendizaje se explica qué estados atraviesa una actividad en Android y qué transiciones existen de una a otra. Lo que a continuación expondré no es más que una traducción al español sintetizada.

Estados

Estos son los estados de una actividad Android:

Estados de una actividad Android

Estados de una actividad Android

Toda actividad hereda de Activity y antes que eso de Context. Por ello, toda actividad debe sobreescribir el método onCreate(), que se ejecuta nada más iniciarse la actividad. Además, es éste el único método que estaremos obligados a implementar de todo el flujo de la actividad; los demás son opcionales. Después, la actividad se inicia, y se ejecuta el código que haya en onStart(). Estos dos estados son transicionales y se ejecutan rápidamente. A continuación, se ejecuta el código que haya en onResume().

A partir de este momento, la actividad cambia entre los estados Resumed, Paused (cuando pierde el foco en el terminal del usuario, normalmente porque aparece un diálogo) y Stopped (cuando pasa a background porque se inicia otra actividad, posiblemente de otra aplicación diferente). Finalmente, una actividad pasa a estado Destroyed cuando finaliza, bien porque dicha actividad ha terminado automáticamente llamando a finish() o bien porque el usuario la cierra, puslando sobre el botón de ir hacia atrás.

Cabe destacar que antes de pasar a Stopped, siempre se pasa antes por Paused, de manera que antes de ejecutar onStopped() se ejecutará onPaused().

Los únicos estados estables en el tiempo son, por tanto, Resumed, Paused y Stopped. Cuando una actividad se inicia rápidamente se ejecuta el código de crear, iniciar y continuar (en inglés, resume). Finalmente, no es necesario sobreescribir onDestroy() a menos que haya que liberar recursos creados en las etapas de creación o inicialización.

A partir de ahí la actividad está plenamente operativa. Es importante tener todo esto en cuenta a la hora de diseñar nuestras actividades y saber cuál será el flujo de ejecución de las mismas.


Referencias:

Android training guide

Anuncios

Verdades y mentiras sobre un Ingeniero en Informática

Me voy a llevar palos. Sé que me los voy a llevar. Pero lo voy a decir, jamás me ha echado para atrás por miedo a las posibles críticas que pudiera recibir. Lo importante es que hablen de uno, aunque sea mal, ¿no? Bueno, tampoco es cuestión de montar escándalos para hacerse uno famoso… eso se lo dejamos para los que salen en la prensa rosa, sean ellos quienes sean.

Esto me viene por algunos comentarios que he oído a informáticos y no informáticos: que si somos tal o cual, a veces cosas buenas, a veces cosas malas y otras veces cosas que simplemente no son ciertas. Que conste que esto es una opinión muy personal, la opinión personal de un Ingeniero en Informática que no lleva más de 9 años metido en este mundillo y 4 años licenciado como Ingeniero Superior en Informática.

Qué (es) debería ser un Ingeniero en Informática

  • El profesional más indicado para realizar labores relacionadas con la informática. Esto parece de perogrullo, pero creo que es necesario dejarlo bien claro. No quiero ofender a ingenieros de otras especialidades, pero es que esto es así. No estoy hablando (únicamente) de programación. También me refiero a gestión de proyectos, análisis, diseño, testing y por supuesto programación. Durante la carrera hemos tenido un montón de asignaturas que cubren todo el desarrollo del software como para dejar estas importantes tareas en manos menos formadas o inexpertas. Por el mismo motivo, un ingeniero informático no puede estudiar señales, transmisión de datos o estudiar el rendimiento de un motor.
  • El más indicado para programar. Insisto: la persona más indicada para programar es un ingeniero informático. Durante su formación habrá estudiado programación a fondo en varias asignaturas, por lo tanto tiene la base más completa. Pero no nos equivoquemos: un recién licenciado en informática apenas sabe programar bien. En ocasiones deberá olvidar muchas cosas que le enseñaron durante la carrera y re-aprender cosas. Una de las primeras cosas que deducimos cuando nos licenciamos es que la programación no es para ingenieros informáticos. Despreciamos esa labor porque pensamos que es una tarea de bajo nivel. Nada más lejos de la realidad: la programación es una actividad intelectual compleja y que requiere de práctica, experiencia y una buena base.
  • Un ingeniero que está en continuo aprendizaje y proceso de mejora profesional. El que piense que una vez tiene el título en la mano ya puede dedicarse a trabajar, ganar dinero y tirarse en el sofá cuando llegue a casa lo tiene claro. Sabemos cómo cambia el mundo de las tecnologías, y la obsolescencia es nuestro mayor enemigo. Aprende nuevos lenguajes de programación, adquiere nuevas técnicas, patrones, estrategias… y sobre todo: lee mucho. Aprende de los que más saben de esto: Martin Fowler, Robert Martin, Kent Beck, Steve McConnell… por nombrar unos pocos.
  • Una persona que habla y escribe correctamente. Como cualquier persona que ame su tierra y su lengua. Ningún licenciado superior debería mirarse al espejo cada mañana sabiendo que comete faltas de ortografía al escribir.
  • Una persona que domina perfectamente el inglés (al menos). Nuestro campo de trabajo está principalmente liderado por el inglés. Es nuestro lenguaje de modelado y programación más importante. Debemos ser capaces de dominarlo por lo menos a nivel de negocio y técnico.
  • Una persona que está al día de todo lo que se mueve en su mundo, a rasgos generales. En menor medida, es importante que un ingeniero en informática sepa lo que es Android, Google+, saber la diferencia entre SOAP y REST o conocer qué es Objective-C, aunque no sepa programar en dicho lenguaje.
  • Alguien que sabe venderse de cara al público, que sabe sacar partido de su carrera profesional. No estoy hablando de mentir, hablo de saber explicar las capacidades de uno mismo. Muchas veces los ingenieros no sabemos contar nuestra experiencia laboral en una entrevista, nos apocamos con una humildad que no debería ser tal: uno debe estar orgulloso del camino recorrido hasta la fecha, y si domina una tecnología, técnica o habilidad debería decirlo.

Qué NO es un Ingeniero en Informática

  • Una persona culta. Para mí una persona culta es un médico, un físico, un historiador, un escritor o un psicólogo. Si uno quiere ser culto, debe leer libros que NO estén relacionados con la informática. No nos creamos sabios: no lo somos. Somos ingenieros: eso significa que aplicamos el ingenio, la perspicacia y la inteligencia para resolver puzzles, dar soluciones a problemas. Eso significa que tenemos una mente creativa, analítica y capaz de resolver problemas. Pero eso no significa que seamos cultos. Una persona culta sabe de cosas de la vida, cosas que le ayudan a comprender el mundo que le rodea. La informática no es un fin, amigos, es un medio, y como tal no es un Campo del Saber. Ni mucho menos. Esto lo quería dejar bien claro para aquellos informáticos que se creen más de lo que son. Un poco de humildad, por favor.
  • El chico que arregla ordenadores. Eso es un técnico, que seguramente sepa mucho más de eso que nosotros. Un ingeniero en informática tiene conocimientos ingenieriles sobre producción de software: análisis, diseño, implementación, pruebas, mantenimiento, gestión, etc. Pedir a un ingeniero en informática que arregle tu ordenador es como pedirle a un ingeniero de la escudería Ferrari de F1 que te cambie el aceite de tu Ford Fiesta. Puede saber hacerlo o no, por cuestiones de hobbys y como reto personal, pero en todo caso no tiene por qué saberlo hacer y seguro que un mecánico te lo hará mejor.
  • Alguien que hace su trabajo gratis. Puesto que cuando haces una consulta a un abogado te cobra una pasta, cuando llamas al fontanero te cobra una pasta, a un cerrajero lo mismo, no digamos de electricistas, pequeños “apaños”, arreglos y chapuzas varias… un informático no hace su trabajo gratis, sea de la índole que sea. Ante todo es un profesional, y como profesional que es cobra por su trabajo. No hacerlo es un insulto a la profesión y rebajarse uno mismo a la posición de amateur. Yo no puedo cobrarle a alguien por cambiar una estantería, porque no me dedico a ello y el que me lo pida sabe que puedo hacerlo bien o mal, con sus consecuencias. Pero sí puedo pedirle que me pague por arreglarle su ordenador o hacerle un programa de tal o cual naturaleza, configurarle su router, su red o su Linux o desbloquearle lo que sea.

Un último apunte

Si eres ingeniero en informática y no lo sabes ya, te lo cuento: no todos los problemas a los que te enfrentarás en tu vida laboral serán satisfactorios, productivos y de los cuales aprenderás algo. En muchas ocasiones te enfrentarás a problemas estúpidos, complicados de solucionar y que cuando consigas, por fin, solucionarlos (horas, días, semanas después), pensarás: “he estado perdiendo el tiempo con algo que no me aporta absolutamente nada productivo“. Ejemplo: problemas de dependencias al instalar cosas en Linux. Puedes perder un tiempo valiosísimo reduciendo tu productividad a -100. Cuando por fin consigas instalar el software que pretendías pensarás: “vale, ya sé hacerlo, lo he documentado y todo (porque habrás escrito en algún sitio lo que has ido haciendo, ¿verdad?). Y estoy seguro de que la próxima vez que lo vuelva a intentar las dependencias serán diferentes, los sistemas habrán cambiado, en vez de apt-get será yum u otra cosa y volveré a perder un porcentaje importante de mi vida tratando de atravesar paredes con una cucharilla de café”.

Ante estas situaciones, amigo, te recomiendo: quítate estos marrones de encima cuanto antes. Replantéate cuanto antes si hay una solución más fácil a tu problema: una máquina virtual descargable con el software preinstalado, un becario, otra plataforma, un manual, un software que te detecte dependencias y autoinstale… lo que sea. Es tiempo NO productivo, y no te engañes: estas cosas no te hacen más experimentado ni más listo. Simplemente te hacen perder tiempo. Y si no te queda más remedio… pues paciencia.


Bibliografía interesante:

The Clean Coder, Robert Martin.

Este libro explica cómo debe comportarse un auténtico profesional de la Informática, orientado a aquellas personas que trabajan en equipo para el desarrollo de un proyecto software.

Encuentros futuros

Será un 27 de diciembre de 2012. Yo estaré ansioso por su llegada, llevaré horas esperando en algún banco sentado de la terminal del aeropuerto, pensando en cuánto más tardará en llegar. Estaré pensando en mis cosas, mirando el reloj cada minuto, jugueteando con el teléfono, mirando a las personas que pasen por delante de mí.

Y entonces aparecerá. Y yo no sabré cómo reaccionar. Al principio no reparará en mi presencia, avanzará dubitativa por la gran sala buscándome con la mirada. Y yo no sabré si sonreír o quedarme pasmado mirándola. Entonces por fin me verá, sonreirá y avanzará hacia mí, conteniendo las ganas de echar a correr. Y yo, sentado, las manos paralelas a mis piernas, agarrando el borde del asiento del banco, me agarraré con más fuerza y me morderé el labio hasta hacerme daño, por contenerme y no echar a correr hacia ella.

Y por fin, con un gesto entre la duda y el nerviosismo, me incorporaré, sentiré mis pies clavados al suelo, incapaces de moverse ni un sólo milímetro, y esperaré a que me alcance.

Entonces nos fundiremos en un beso que durará una eternidad, el tiempo y el espacio se arremolinarán a nuestro alrededor hasta desaparecer, perderemos la sensación de gravidez, nos transportaremos a un lugar inexplorado del universo en el cual nada más existe y nada más que ella y yo tendrá importancia. Despegaremos nuestros labios y nos miraremos a los ojos largamente. Acariciaré su pelo negro azabache y su piel morena y ella sonreirá. Me fijaré en cada lunar de su rostro, los estudiaré sonriendo y ella apartará su mirada, azorada. Su timidez. Entonces yo sostendré su mentón, alzaré su rostro y volveré a besarla, y estudiaré cada milímetro de su piel. Primero con los ojos, después con la yema de los dedos.

Después repararemos en dónde estamos y el hechizo se romperá. Retornaremos a la Tierra, volveremos a escuchar a la gente pasar, las ruedas de las maletas deslizándose por el suelo de la terminal. Y saldremos del aeropuerto. Nos montaremos en mi coche y estaremos listos para disfrutar de los 50 días más felices de mi vida.


Esto lógicamente aún no ha pasado. Pero así es como se lo contaré a nuestros nietos dentro de cuarenta años. Estoy seguro de que lo único que cambiará en este relato será el tiempo, de futuro a pasado.