Quiero cerrar mi aplicación, para que ya no se ejecute en segundo plano.
¿Como hacer eso? ¿Es esta una buena práctica en la plataforma Android?
Si confío en el botón "Atrás", cierra la aplicación, pero permanece en segundo plano. Incluso hay una aplicación llamada "TaskKiller" solo para eliminar esas aplicaciones en segundo plano.
Respuestas:
Android tiene un mecanismo para cerrar una aplicación de forma segura según su documentación. En la última Actividad que sale (generalmente la Actividad principal que apareció por primera vez cuando se inició la aplicación) simplemente coloque un par de líneas en el método onDestroy (). La llamada a System.runFinalizersOnExit (true) asegura que todos los objetos se finalizarán y se recolectará la basura cuando la aplicación salga. También puede eliminar una aplicación rápidamente a través de android.os.Process.killProcess (android.os.Process.myPid ()) si lo prefiere. La mejor manera de hacer esto es poner un método como el siguiente en una clase auxiliar y luego llamarlo cuando la aplicación deba ser eliminada. Por ejemplo, en el método de destrucción de la actividad raíz (suponiendo que la aplicación nunca mate esta actividad):
Además, Android no notificará a una aplicación el evento de la tecla INICIO , por lo que no puede cerrar la aplicación cuando se presiona la tecla INICIO . Android se reserva el evento clave HOME para que un desarrollador no pueda evitar que los usuarios abandonen su aplicación. Sin embargo, puede determinar si se presiona la tecla INICIO estableciendo una marca en verdadero en una clase auxiliar que asume que se ha presionado la tecla INICIO , luego cambiando la marca a falso cuando ocurre un evento que muestra que la tecla INICIO no se presionó y luego comprobando si la tecla INICIO se presionó en el método onStop () de la actividad.
No olvide manejar la tecla INICIO para cualquier menú y en las actividades que inician los menús. Lo mismo ocurre con la tecla BUSCAR . A continuación hay algunas clases de ejemplo para ilustrar:
Aquí hay un ejemplo de una actividad raíz que mata la aplicación cuando se destruye:
Aquí hay una actividad abstracta que se puede extender para manejar la tecla INICIO para todas las actividades que la extienden:
Aquí hay un ejemplo de una pantalla de menú que maneja la tecla INICIO :
Aquí hay un ejemplo de una clase auxiliar que maneja la tecla HOME en la aplicación:
fuente
killApp()
, ya que Google ha indicado que conducirá a un comportamiento impredecible.¡SI! Sin duda, puede cerrar su aplicación para que ya no se ejecute en segundo plano. Como otros han comentado,
finish()
la forma recomendada por Google no significa que su programa esté cerrado.Ahí cerrará su aplicación sin dejar nada ejecutándose en segundo plano. Sin embargo, use esto sabiamente y no deje los archivos abiertos, las manijas de las bases de datos abiertas, etc. Estas cosas normalmente se limpiarían mediante el
finish()
comando.Personalmente ODIO cuando elijo Salir en una aplicación y realmente no sale.
fuente
Así es como lo hice:
Acabo de poner
dentro del método que abre una actividad, luego dentro del método de SOMECLASSNAME que está diseñado para cerrar la aplicación que puse:
Y puse lo siguiente en mi clase principal:
fuente
Solo para responder mi propia pregunta ahora después de tanto tiempo (ya que CommonsWare comentó sobre la respuesta más popular que dice que NO debemos hacer esto):
Cuando quiero salir de la aplicación:
FLAG_ACTIVITY_CLEAR_TOP
(que cerrará todas las demás actividades iniciadas después, lo que significa que todas ellas). Simplemente haga que esta actividad esté en la pila de actividades (no la termine por alguna razón por adelantado).finish()
a esta actividadEsto es, funciona bastante bien para mí.
fuente
Simplemente escriba este código en su botón SALIR, haga clic.
Y en el método onCreate () de su MainActivity.class escriba debajo del código como primera línea,
fuente
No es posible usar las API de framework. Es a discreción del sistema operativo (Android) decidir cuándo un proceso debe eliminarse o permanecer en la memoria. Esto es por razones de eficiencia: si el usuario decide reiniciar la aplicación, ya está allí sin tener que cargarla en la memoria.
Así que no,
no solo sedesaconseja, es imposiblehacerlo.fuente
Para salir de formas de aplicación:
Camino 1:
llamar
finish();
y anularonDestroy();
. Pon el siguiente código enonDestroy()
:o
Camino 2:
Camino 3:
Camino 4:
Camino 5:
A veces, las llamadas
finish()
solo saldrán de la actividad actual, no de toda la aplicación. Sin embargo, hay una solución para esto. Cada vez que inicies unactivity
, comienza a usarlostartActivityForResult()
. Cuando desee cerrar toda la aplicación, puede hacer algo como lo siguiente:Luego, defina la
onActivityResult(...)
devolución de llamada de cada actividad para que cuando unaactivity
regrese con elRESULT_CLOSE_ALL
valor, también llame afinish()
:fuente
Así es como Windows Mobile ha funcionado ... bueno ... ¡siempre! Esto es lo que Microsoft tiene que decir al respecto:
http://blogs.msdn.com/windowsmobile/archive/2006/10/05/The-Emperor-Has-No-Close.aspx (¿es triste que haya recordado el título de la publicación del blog desde 2006? Encontré el artículo en Google buscando "el emperador no tiene cerca" jajaja)
En breve:
Muchos comentarios en esta pregunta en O'Reilly sugieren que Android se comporta de la misma manera, cerrando aplicaciones que no se han usado durante un tiempo solo cuando Android necesita la memoria que están usando.
Dado que esta es una característica estándar, cambiar el comportamiento para cerrar con fuerza cambiaría la experiencia del usuario. Muchos usuarios se habrían acostumbrado al rechazo suave de sus aplicaciones de Android, por lo que cuando descartan una con la intención de volver a ella después de realizar otras tareas, pueden sentirse bastante frustrados de que el estado de la aplicación se restablezca o que tarde más abrir. Me quedaría con el comportamiento estándar porque es lo que se espera.
fuente
Llamar al
finish()
método en una Actividad tiene el efecto deseado en esa actividad actual.fuente
ninguna de las respuestas anteriores funciona bien en mi aplicación
aquí está mi código de trabajo
en su botón de salida:
ese código es para cerrar cualquier otra actividad y llevar MainActivity a la cima ahora en su MainActivity:
fuente
Ponga una
finish();
declaración de la siguiente manera:En cada actividad
fuente
fuente
Copie el código a continuación y pegue el archivo AndroidManifest.xml en Primera etiqueta de actividad.
Agregue también este código a continuación en todo bajo Etiqueta de actividad en el archivo AndroidManifest.xml
fuente
No es posible con 2.3. Busco mucho y probé muchas aplicaciones. La mejor solución es instalar tanto (go taskmanager) como (reinicio rápido). Cuando los use juntos, funcionará y liberará la memoria. Otra opción es actualizar a Android Ice Cream Sandwich 4.0.4 que permite el control (cierre) de las aplicaciones.
fuente
Quería volver a la pantalla de inicio de mi dispositivo Android, así que simplemente usé:
fuente
El uso de
finishAffinity()
puede ser una buena opción si desea cerrar todas las actividades de la aplicación. Según los documentos de Androidfuente
y en manifiesto:
Luego puede llamar
CloseAppActivity.closeApp(fromActivity)
y la aplicación se cerrará.fuente
Simplemente escriba el siguiente código en onBackPressed:
fuente
llamando a finish (); en el botón OnClick o en el menú
fuente
finish()
no mata la aplicación. Puede volver al Intento anterior o al fondo de la Aplicación.Creo que cerrará su actividad y toda la Sub actividad relacionada con ella.
fuente
La mejor y más corta forma de usar la tabla System.exit.
La VM detiene la ejecución y el programa se cerrará.
fuente
Utilice "
this.FinishAndRemoveTask();
": cierra la aplicación correctamentefuente