android - tactiles - ¿Cómo hacer que una actividad se detenga, en lugar de ser destruida, desde la tecla ATRÁS?
no funciona boton aplicaciones recientes (7)
¿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 evitar que la actividad se destruya "solo para mantener las variables" tiene sentido.
Incluso si detienes la aplicación sin destruirla, siempre existe la posibilidad de que Android la mate para liberar memoria. Deberá tener esto en cuenta en su código de todos modos, y así evitar que la aplicación se destruya no le impide escribir código.
Las variables pueden guardarse y restaurarse de forma relativamente fácil y rápida utilizando SharedPreferences en sus métodos onPause () y onResume (). A menos que esté almacenando una tonelada de datos, evitar que la aplicación se destruya podría no hacer una gran diferencia.
Parece que desea mantener las variables en la memoria porque tiene la intención de volver a esta actividad. Por lo general, no usa el botón Atrás para alejarse de las actividades a las que pretende regresar. En su lugar, crearías una Intención y comenzarías una nueva actividad. Cuando haces esto, Android coloca la actividad actual en la pila Back que llama onPause () y onStop (), que parece ser exactamente el tipo de comportamiento que estás buscando.
Entonces, si realmente quieres evitar que tu actividad se destruya (al menos hasta que Android decida que está usando demasiada memoria y la mata por sí sola), siempre puedes usar el código de Sagar y comenzar una nueva actividad en onBackPressed ().
@Override
public void onBackPressed()
{
Intent intent = new Intent(this, Other.class);
startActivity(intent);
}
Solo asegúrate de que eso es lo que realmente quieres hacer.
En este momento, una actividad se destruye cuando se presiona la tecla ATRÁS. ¿Cómo puedo hacer que simplemente se detenga (es decir, mantenga vivas todas las variables, etc.), en lugar de destruirlas?
¡Gracias!
Al presionar la tecla ATRÁS se activa el método de devolución de llamada onBackPressed
de la clase de 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 anular este método para mover la actividad a un segundo plano (imite la acción de presionar la tecla INICIO).
p.ej:
@Override
public void onBackPressed() {
onKeyDown(KeyEvent.KEYCODE_HOME);
}
En su lugar, también podría considerar moveTaskToBackground()
mencionado aquí:
En primer lugar, perdón por no responder a la pregunta, porque aún no tengo una respuesta óptima. Pero, realmente me gusta cuando la gente comienza 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 está bien, este no es el problema ...
De todos modos, intentaré señalar por qué algunos de nosotros estamos convencidos de que
pasando de la Actividad A a la Actividad B (creando una interfaz de usuario basada en la obtención de algunos datos) Y
volver de B a A (destruir toda la IU creada y / o los datos obtenidos en B) es a veces un mal concepto. Una solución mejor sería mantener la pila tal como está, así que usar algo como finish () en la Actividad B, pero mantener la Actividad B en estado de pausa, así que más tarde, al volver a llamar desde la Actividad A, simplemente va en onResume = no se vuelve a crear nada en la interfaz de usuario, no hay recuperación de datos adicionales. Por supuesto, la bonificación es una IU rápida y receptiva, y la diferencia es realmente si tiene un diseño de UI más complicado.
Esto es similar a esta pregunta que se hizo anteriormente.
¡Espero que esto ayude! NS
Me las arreglé para resolver exactamente lo que usted desea: ¡ cambie entre 2 actividades usando el botón Atrás y guárdelos para que no se destruyan!
Por ejemplo: tiene 2 actividades A y B. Primero se iniciará A, luego A llamará a B. Cuando B está cargado, el usuario presiona el botón Atrás y vuelve a la actividad A desde B. A partir de ahora, B no debe ser destruido y simplemente se va. en segundo plano , y cuando el usuario inicie de nuevo la actividad B desde A, la actividad B pasará a primer plano, en lugar de volver a crearla o crear una nueva instancia.
Cómo implementar esto:
1. Anular 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 el indicador: Intención. FLAG_ACTIVITY_REORDER_TO_FRONT cuando llame a A&B.
Simple una linea
@Override
public void onBackPressed() {
mActivity.moveTaskToBack(true);
}
Simplemente especifique en el manifiesto para la actividad como
android:persistent="true"
Eso debería evitar que tu actividad se destruya. Para saber más sobre esto, consulte los siguientes enlaces que fueron respondidos por mí
¿Cómo prevenir la llamada de onDestroy () después de onPause ()?
Evitar que la actividad sea destruida el mayor tiempo posible.
En los posts anteriores he explicado en detalle con un caso de uso.