2013-05-10 13 views
8

Ho 2 attività, quindi attività 1 andare all'attività 2 quindi attività 2 Ho un pulsante di uscita. Ma quando lo clicco, tutto è solo uscito dall'attività numero 2 e ritorna di nuovo all'attività 1. In pratica mi sono sentito come se avessi appena riavviato l'applicazione. Non sono sicuro del perché?System.exit (0) non chiude tutte le mie attività?

Questo è il mio codice.

Button btExit = (Button) findViewById(R.id.btExit); 
    btExit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
      System.exit(0); 
     } 
    }); 
+2

call finish() dopo startActivity (Activity2) nella Activity1. – Anukool

+0

http://stackoverflow.com/questions/2033914/quitting-an-application-is-that-frowned-upon. Consiglia di non usare System.exit (0); – Raghunandan

+1

@Anukool che non funzionerà se l'utente preme il tasto indietro anziché il pulsante. –

risposta

43
System.exit(0); 

è un brutto modo di cessazione di applicazioni Android. Android gestisce nel proprio os

È possibile richiamare l'applicazione Home dal suo corrispondente Intent:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

Spero che questo aiuti

EDIT: -

Poi ti immagino mirano a finire tutta l'attività accatastata ..

Eccolo: -

Chiusura di tutte le attività precedenti come segue:

Intent intent = new Intent(this, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("Exit me", true); 
startActivity(intent); 
finish(); 

Poi nel MainActivityonCreate() metodo aggiungere questo per finire il MainActivity

if(getIntent().getBooleanExtra("Exit me", false)){ 
    finish(); 
} 

Il risultato sarà lo stesso come sopra, ma perché tutti le attività accumulate sono chiuse, quando torni all'app devi iniziare dall'attività principale, ad esempio l'attività di avvio.

Spero che questo aiuti.

+0

moveTaskToBack (true) –

+0

@ MaciejGórski L'applicazione HOME (o l'uso di 'moveTaskToBack()') non cambierà lo stato corrente di questa attività. Ciò significa, utilizzando questo esempio, che quando l'utente avvia nuovamente questa applicazione dalla schermata HOME, porterà in primo piano l'attività esistente (contenente Activity1 e Activity2) e mostrerà all'utente Activity2 (che probabilmente è ** non ** –

+0

@DavidWasser Ne sono consapevole, ecco perché la mia risposta è diversa, il mio commento era di semplificare la risposta di CRUSADER e NUNU –

7

Non utilizzare System.exit.

Se si desidera all'utente di chiudere app da qualsiasi Activity Io suggerisco di usare startActivityForResult, controllando il valore restituito in onActivityResult in prima Activity e chiamando finish() anche lì.

+1

Perché? la finitura non chiude l'applicazione, solo l'attività è chiusa. Le persone, cercano di capire che abbiamo molte altre classi che non derivano dall'attività. Possono essere utilizzati per automatizzare la connessione DB, l'ID di accesso al negozio, il nome utente, i risultati dell'ultima query ... Quindi l'attività di chiusura NON RISOLVE il problema nell'ambiente di produzione. Aaa, cześć Maciek;) – TomeeNS

4

è possibile simulare colpire il tasto Home:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

ma questo non chiudere l'applicazione ..

per chiuderla, si può fare come https://stackoverflow.com/a/9735524/1434631

+1

L'apertura dell'applicazione HOME non cambierà lo stato corrente di questa attività. Ciò significa, utilizzando questo esempio, che quando l'utente avvia nuovamente questa applicazione dalla schermata HOME, porterà in primo piano l'attività esistente (contenente Activity1 e Activity2) e mostrerà all'utente Activity2 (che probabilmente non è ciò che OP vuole capita. La soluzione collegata è migliore. –

0

usa finish() e un flag sharedPreference e imposta il flag quando fai clic sul pulsante. sulla tua altra attività, controlla la bandiera e finisci() se la bandiera è impostata

0

Termina la prima attività chiamando finish(); sul buttonclick dopo aver passato l'intento di avviare l'attività successiva.

0

Sistema.exit (0) non funziona per la chiusura dell'applicazione

ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    am.killBackgroundProcesses("com.root.abc"); 

    System.runFinalizersOnExit(true); 
    System.exit(0); 


add Manifest permission 
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> 
Problemi correlati