2010-03-19 6 views
8

Vorrei mettere in pausa o mettere l'applicazione sullo sfondo quando si preme il pulsante Indietro, non voglio che l'applicazione passi attraverso il pulsante destroy stato. Le cose accadono quando sovrascrivo onKeyDown e quando impongo di mettere in pausa o interrompere l'applicazione usando onPause, ho alcuni problemi con il wakelock e l'arresto anomalo dell'applicazione, ma quando premo il tasto home passo attraverso il metodo onPause e non ho eccezioni, è strano !!Android - Evitare un'attività da distruggere, basta fermarlo o metterlo in pausa quando si preme il pulsante Indietro

+2

Basta scrivere la vostra attività per salvare correttamente il suo stato, usando 'onSaveInstanceState() '. Nessuna attività può vivere per sempre, in quanto Android distrugge anche le attività in pausa per recuperare la RAM. – CommonsWare

+0

Sto lavorando all'applicazione GPS incorporata su un dispositivo per auto. Quando si verifica un incidente, il mio servizio riprende l'applicazione per visualizzare l'evento incidente. Se l'utente fa clic sul pulsante Indietro, l'applicazione viene distrutta e quando il servizio la riprende, ci vuole del tempo per ricreare le attività e quindi si presenta l'evento incidente. Se il sistema ha bisogno di distruggere l'applicazione, sono sicuro che l'utente non sarà infastidito dalla ricreazione altrimenti l'applicazione non deve essere distrutta, è una questione di sicurezza! – Ghostwan

+1

"Sto lavorando all'applicazione GPS incorporata su un dispositivo per auto." Quindi hai il controllo del firmware e puoi fare cose oltre l'SDK (e, francamente, oltre la capacità generale di StackOverflow di aiutare). "Se l'utente fa clic sul pulsante Indietro, l'applicazione viene distrutta e quando il servizio la riprende, ci vuole del tempo per ricreare le attività e quindi si presenta l'evento dell'incidente." Lavorare per accelerare le prestazioni di apertura delle attività, quindi. "l'applicazione non deve essere distrutta, è un problema di sicurezza!" Android è probabilmente la scelta sbagliata del sistema operativo per la tua applicazione. – CommonsWare

risposta

11

La risposta è

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 

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

    return false; 
} 
+0

Altro caso, come farlo quando l'utente fa clic su attività di back-end, non sembra che non chiami su KeyDown. – kangear

+0

ok, mi piace la soluzione per il tocco al di fuori di Windows.http: //stackoverflow.com/a/5831214/2193455 – kangear

18

tenta di utilizzare il metodo onBackPressed(), in questo modo:

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

onBackPressed() è valido dal livello API 5, quindi se non stai supportando i dispositivi precedenti, questa risposta è meglio. –

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

} 
Problemi correlati