2015-04-10 16 views
5

Ho varie attività nella mia app e il flusso è molto complesso. Quello che voglio fare è, non appena il dispositivo USB è collegato, voglio cancellare e terminare le attività di back stack, quindi completare l'attività corrente e System.exit (0) per chiudere l'app.Android: cancella tutte le attività backstack e quindi termina l'attività corrente

Ho già implementato il listener di dispositivi USB. Voglio sapere come faccio a cancellare e terminare le attività di stack (se ce ne sono, non avremo attività di backstack ogni volta) e poi terminare quella attuale.

Inoltre, se la mia attività A è in cima e ha 2 attività (B, C) nello stack posteriore. Ora se l'attività A è in esecuzione in background e connessa tramite USB, solo l'attività A la ascolterà correttamente? (Ho implementato un ricevitore USB in ogni attività.)

Come posso ottenere questo risultato senza l'arresto anomalo dell'app?

Grazie

risposta

6

c'è finishAffinity() metodo che si concluderà l'attività in corso e tutte le attività principali, ma funziona solo in Android 4.1 o superiore

Source

finishAffinity() finirà questa attività, nonché come tutte le attività immediatamente sotto di esso nell'attività corrente che hanno la stessa affinità

Se si desidera per tutti i livelli di API
in una delle vostre attività metodo

Intent intent = new Intent(this, YourActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this will clear all the stack 
intent.putExtra("Exit me", true); 
startActivity(intent); 
finish(); 

Poi nel YourActivity onCreate() aggiungere questo per terminare l'attività

setContentView(R.layout.your_layout); 
if(getIntent().getBooleanExtra("Exit me", false)){ 
    finish(); 
    return; // add this to prevent from doing unnecessary stuffs 
} 
+0

Io uso Android 4.2.2 quindi finishAffinity() funzionerà? – dhun

+0

@dhun sì, controllare una volta –

+0

Devo aggiungere anche finish() dopo aver chiamato finishAffinity() per terminare l'attività corrente? – dhun

0

In un app che ho fatto, ho messo:

if(Globals.isExit){ 
    finish(); 
} 

In ogni metodo onResume() in ogni attività.

Globals è una classe dichiarata come manifest in manifest.xml. La classe Global ha un booleano chiamato exit.

In tutto menu delle opzioni attività, dispone di un'uscita questo è opzione imposta Globals.exit al vero, e le chiamate finitura()

Poi tutte le attività non finita sono tutti finiti.

Non sono sicuro se è necessario utilizzare un intento per cancellare il backstack o se il completamento lo cancella per te. Scusate se sbaglio per quel po '.

Ci scusiamo per una cattiva digitazione, sono al telefono.

+0

Si potrebbe anche aprire ogni attività witf startForResult, e in everry activity have finish() nel metodo onReturned() – matty357