¿Cómo hacer que una actividad se detenga, en lugar de ser destruida, desde la tecla ATRAS?

En este momento una actividad se destruye cuando se presiona la tecla BACK. ¿Cómo puedo hacer que sólo detenga (es decir, mantener todas las variables, etc vivos), en lugar de ser destruido?

¡Gracias!

7 Solutions collect form web for “¿Cómo hacer que una actividad se detenga, en lugar de ser destruida, desde la tecla ATRAS?”

¿Por qué es necesario mantener vivas las variables? Dado el ciclo de vida establecido de una aplicación de Android, no estoy seguro de que impedir que la actividad sea destruida "sólo para mantener las variables" tiene sentido.

  1. Incluso si detiene la aplicación sin destruirla, siempre existe la posibilidad de que Android la mate para liberar memoria. De todos modos, tendrás que tener en cuenta esto en tu código, y así evitar que la aplicación destruya no te ahorra escribir código.

  2. Las variables se pueden guardar y restaurar relativamente fácil y rápidamente usando SharedPreferences en sus métodos onPause () y onResume (). A menos que esté almacenando una tonelada de datos, la prevención de la aplicación de la destrucción no puede hacer una gran diferencia.

  3. Parece que desea mantener las variables en la memoria porque tiene la intención de volver a esta actividad. Normalmente, no utiliza el botón de retroceso para desplazarse lejos de las actividades que tiene la intención de volver a. En su lugar, crearía una Intención e iniciaría una nueva actividad. Al hacer esto, Android coloca la actividad actual en la pila posterior llamando onPause () y onStop (), que parece exactamente el tipo de comportamiento que está buscando.

Así que si todavía quieres evitar que tu actividad sea destruida (al menos hasta que Android decida usar demasiada memoria y la mate por tu cuenta), siempre puedes usar el código de Sagar e iniciar una nueva actividad en onBackPressed ().

@Override public void onBackPressed() { Intent intent = new Intent(this, Other.class); startActivity(intent); } 

Sólo asegúrese de que eso es lo que realmente quieres hacer.

Simple una línea

 @Override public void onBackPressed() { mActivity.moveTaskToBack(true); } 

Al presionar la tecla BACK se activa el método de devolución de llamada onBackPressed de la clase Activity . La implementación predeterminada de esta devolución de llamada llama al método finish() .

http://developer.android.com/reference/android/app/Activity.html#onBackPressed ()

Puede sobrescribir este método para mover la actividad a fondo (imitar la acción de presionar la tecla HOME).

p.ej:

 @Override public void onBackPressed() { onKeyDown(KeyEvent.KEYCODE_HOME); } 

También podría considerar moveTaskToBackground() mencionado aquí:

Borrar el botón de retroceso para actuar como botón de inicio

Esto es similar a esta pregunta que se preguntó anteriormente.

¡Espero que esto ayude! NS

En primer lugar, lo siento por no responder a la pregunta, causa, todavía no tengo una respuesta óptima para ello. Pero, me gusta mucho cuando la gente empieza a preguntar "¿para qué necesitas esto?". Y, muy raramente, la persona que hizo la pregunta, realmente merece este tipo de pregunta. Creo que no esta vez, pero bien, este no es el problema …

De todos modos, trataré de señalar por qué algunos de nosotros estamos convencidos de que

pasando de la Actividad A a la Actividad B (creando la Interfaz de Usuario basándose en la recolección de datos) Y

volver de B a A (destruir toda la interfaz de usuario creada y / o los datos obtenidos en B) a veces es un mal concepto. Una mejor solución sería mantener la pila como está, por lo que utilizando algo como finish () en la Actividad B, pero manteniendo la Actividad B en estado de Pausa, de modo que más tarde cuando se vuelva a llamar desde la Actividad A, en la interfaz de usuario, sin datos adicionales de búsqueda. El bono por supuesto es una interfaz de usuario rápida y sensible, y la diferencia es realmente si usted tiene un diseño de interfaz de usuario más complicado.

He conseguido resolver exactamente lo que quieres: cambiar entre 2 actividades utilizando el botón Atrás y mantenerlos todos para no ser destruidos!

Por ejemplo: usted tiene 2 actividades A y B. A se iniciará primero, luego A llamadas B. Cuando B está cargado, el usuario presiona el botón Atrás y cambia de nuevo a la actividad A de B. A partir de ahora B no debe ser destruido y simplemente se va al fondo , y cuando el usuario comienza la actividad B de A otra vez, la actividad B será llevada a primer plano, en vez de ser recreada otra vez o de crear la nueva instancia!

Cómo implementar esto:
1. Anulación onBackPressed () de la actividad B:

 @Override public void onBackPressed() { Intent backIntent = new Intent(this, ActivityA.class); backIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(backIntent); } 

2. En la actividad A, llame a la actividad B:

 public void callActivityB() { Intent toBintent = new Intent(this, ActivityB.class); toBIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(toBintent); } 

recuerde agregar la bandera: Intent.FLAG_ACTIVITY_REORDER_TO_FRONT cuando usted llama A & B.

Simplemente especifique en el manifiesto la actividad como

  android:persistent="true" 

Eso debería impedir que su actividad sea destruida. Para saber más sobre esto por favor refiérase a estos enlaces abajo que fueron contestados por mí

Cómo evitar la llamada de onDestroy () después onPause ()?

Evitar que la actividad sea destruida tanto como sea posible

En los puestos anteriores he explicado en detalle con un caso de uso

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.