2010-03-19 18 views
8

Me gustaría hacer una pausa o poner la aplicación en segundo plano al presionar el botón Atrás, no quiero que la aplicación pase por la destrucción estado. Las cosas pasan cuando anulo onKeyDown y cuando forzo a pausar o detener la aplicación usando onPause, tengo algunos problemas con el wakelock y el bloqueo de la aplicación, pero cuando presiono el botón de inicio voy al método onPause y no tengo excepciones, es raro !!Android - Evitar que una actividad se destruya, simplemente detenerla o detenerla al presionar el botón Atrás

+2

Sólo tiene que escribir su actividad de guardar correctamente su estado, usando 'onSaveInstanceState() '. Ninguna actividad puede vivir para siempre, ya que Android destruye incluso actividades detenidas para reclamar RAM. – CommonsWare

+0

Estoy trabajando en la aplicación de GPS incrustado en un dispositivo de automóvil. Cuando aparece un accidente, mi servicio reanuda la aplicación para mostrar el evento del accidente. Si el usuario hace clic en el botón Atrás, se destruye la aplicación y cuando el servicio se reanuda, se tarda un poco en volver a crear actividades y luego aparece el evento del accidente. Si el sistema necesita destruir la aplicación, estoy seguro de que el usuario no se molestará con la recreación; de lo contrario, la aplicación no debe destruirse, ¡es un asunto de seguridad! – Ghostwan

+1

"Estoy trabajando en una aplicación de GPS incrustada en un dispositivo de automóvil". Entonces usted tiene control sobre el firmware y puede hacer cosas que van más allá del SDK (y, francamente, más allá de la capacidad general de StackOverflow de ayudar). "Si el usuario hace clic en el botón Atrás, la aplicación se destruye y cuando el servicio se reanuda, toma tiempo crear actividades y luego aparece el accidente". Trabaja en acelerar el rendimiento de la apertura de las actividades, entonces. "¡La aplicación no debe ser destruida, es un asunto de seguridad!" Android es probablemente la opción incorrecta de sistema operativo para su aplicación. – CommonsWare

Respuesta

11

La respuesta es

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 

    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     moveTaskToBack(true); 
     return true; // return 
    } 

    return false; 
} 
+0

Otro caso, cómo hacerlo cuando el usuario hace clic en la actividad de fondo, no parece que no llame aKeyDown. – kangear

+0

bien, me gusta la solución para tocar fuera de Windows.http: //stackoverflow.com/a/5831214/2193455 – kangear

18

intenta utilizar el método onBackPressed(), así:

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 
+3

onBackPressed() es válido desde API Nivel 5, por lo que si no está admitiendo dispositivos anteriores, esta respuesta es mejor. –

0
@Override 
public void onBackPressed() { 
    if(mWebView.canGoBack()) 
     mWebView.goBack(); 
    else 
     //super.onBackPressed(); 
     moveTaskToBack(true); 

} 
Cuestiones relacionadas