Esto eventualmente responderá a su pregunta, pero primero quiero abordar una serie de cuestiones que plantea en sus diversos comentarios a las diversas respuestas ya dadas en el momento de escribir este artículo. No tengo intención de cambiar de opinión, sino que están aquí para otros que vengan a leer esta publicación en el futuro.
El punto es que no puedo permitir que Android determine cuándo se va a cerrar mi aplicación. esa debe ser la elección del usuario.
Millones de personas están perfectamente contentas con el modelo donde el entorno cierra la aplicación según sea necesario. Esos usuarios simplemente no piensan en "terminar" la aplicación de Android, como tampoco piensan en "terminar" una página web o "terminar" un termostato.
Los usuarios de iPhone son muy parecidos, ya que al presionar el botón de iPhone no necesariamente se "siente" que la aplicación se cerró, ya que muchas aplicaciones de iPhone continúan donde el usuario la dejó, incluso si la aplicación realmente se cerró (ya que solo el iPhone permite una aplicación de terceros a la vez, en la actualidad).
Como dije anteriormente, hay muchas cosas que suceden en mi aplicación (datos que se EMPUJAN al dispositivo, listas con tareas que siempre deberían estar allí, etc.).
No sé qué significa "listas con tareas que siempre deberían estar allí", pero los "datos que se EMPUJAN en el dispositivo" son una ficción agradable y no deben ser realizados por una actividad en ningún caso. Use una tarea programada (vía AlarmManager
) para actualizar sus datos para una confiabilidad máxima.
Nuestros usuarios inician sesión y no pueden hacerlo cada vez que reciben una llamada telefónica y Android decide eliminar la aplicación.
Hay muchas aplicaciones para iPhone y Android que se ocupan de esto. Por lo general, se debe a que conservan las credenciales de inicio de sesión, en lugar de obligar a los usuarios a iniciar sesión cada vez de forma manual.
Por ejemplo, queremos verificar las actualizaciones al salir de la aplicación
Eso es un error en cualquier sistema operativo. Por lo que usted sabe, la razón por la que su aplicación se está "cerrando" es porque el sistema operativo se está cerrando, y luego su proceso de actualización fallará a mitad de camino. En general, eso no es algo bueno. Verifique las actualizaciones al inicio o verifique las actualizaciones de forma totalmente asíncrona (por ejemplo, a través de una tarea programada), nunca al salir.
Algunos comentarios sugieren que presionar el botón Atrás no mata la aplicación (ver el enlace en mi pregunta anterior).
Al presionar el botón ATRÁS no se "mata la aplicación". Termina la actividad que estaba en pantalla cuando el usuario presionó el botón ATRÁS.
Solo debe terminar cuando los usuarios quieran terminarlo, nunca de ninguna otra manera. Si no puede escribir aplicaciones que se comporten así en Android, entonces creo que Android no se puede usar para escribir aplicaciones reales = (
Entonces tampoco pueden las aplicaciones web. O WebOS , si entiendo su modelo correctamente (aún no he tenido la oportunidad de jugar con uno). En todos ellos, los usuarios no "terminan" nada, simplemente se van. El iPhone es un poco diferente, ya que actualmente solo permite que una cosa se ejecute a la vez (con algunas excepciones), por lo que el acto de abandonar implica una finalización bastante inmediata de la aplicación.
¿Hay alguna manera de que realmente salga de la aplicación?
Como todos los demás le dijeron, los usuarios (a través de BACK) o su código (a través de finish()
) pueden cerrar su actividad actualmente en ejecución. Los usuarios generalmente no necesitan nada más, para aplicaciones correctamente escritas, más de lo que necesitan una opción de "cerrar" para usar aplicaciones web.
No hay dos entornos de aplicación iguales, por definición. Esto significa que puede ver las tendencias en los entornos a medida que surgen nuevos y otros se entierran.
Por ejemplo, hay un movimiento creciente para tratar de eliminar la noción del "archivo". La mayoría de las aplicaciones web no obligan a los usuarios a pensar en los archivos. Las aplicaciones de iPhone generalmente no obligan a los usuarios a pensar en archivos. Las aplicaciones de Android generalmente no obligan a los usuarios a pensar en archivos. Y así.
Del mismo modo, hay un movimiento creciente para tratar de eliminar la noción de "finalizar" una aplicación. La mayoría de las aplicaciones web no obligan al usuario a cerrar sesión, sino que lo cierran implícitamente después de un período de inactividad. Lo mismo con Android, y en menor medida, iPhone (y posiblemente WebOS).
Esto requiere más énfasis en el diseño de la aplicación, enfocándose en los objetivos comerciales y no apegarse a un modelo de implementación vinculado a un entorno de aplicación anterior. Los desarrolladores que carecen del tiempo o la inclinación para hacer esto se sentirán frustrados con los entornos más nuevos que rompen su modelo mental existente. Esto no es culpa de ninguno de los entornos, como tampoco es culpa de una montaña por las tormentas que fluyen a su alrededor en lugar de atravesarla.
Por ejemplo, algunos entornos de desarrollo, como Hypercard y Smalltalk, tenían la aplicación y las herramientas de desarrollo combinadas en una sola configuración. Este concepto no cogió mucho, fuera de las extensiones de lenguaje para aplicaciones (por ejemplo, VBA en Excel , Lisp en AutoCAD ). Los desarrolladores que idearon modelos mentales que suponían la existencia de herramientas de desarrollo en la propia aplicación, por lo tanto, tuvieron que cambiar su modelo o limitarse a entornos donde su modelo fuera válido.
Entonces, cuando escribes:
Junto con otras cosas desordenadas que descubrí, creo que desarrollar nuestra aplicación para Android no va a suceder.
Eso parecería ser lo mejor, para ti, por ahora. Del mismo modo, le aconsejaría que no intente portar su aplicación a la Web, ya que algunos de los mismos problemas que ha informado con Android también se encontrarán en las aplicaciones web (por ejemplo, sin "terminación"). O, por el contrario, algún día si haces puerto de su aplicación a la Web, es posible que el flujo de la aplicación web puede ser un mejor partido para Android, y se puede volver a un puerto de Android en ese momento.