2013-08-17 16 views
26

Sto parlando di programmazione in Android.Differenza tra finish() e System.exit (0)

Nei primi giorni ho pensato che, finish()chiude attività corrente e tornare alla precedente nello stack di attività, e System.exit(0)chiude l'intera applicazione.

Ma mi sbagliavo. Ho fatto un piccolo esperimento e ho capito che Entrambi finiranno solo l'attività corrente.


Le uniche differenze che ho potuto notare è che, in Android 2.3.3

  • Il ActivityResult si propaga torna a onActivityResult() utilizzando finish(). Considerando che onActivityResult() non viene chiamato per System.exit(0).

Ma in Android 4.2.2, onActivityResult() viene chiamato per entrambi! e Intent era nullo per exit(). (ho testato solo in questi 2 dispositivi)

  • C'è un tempo di ritardo quando si utilizza exit(), mentre finish() è più veloce. (Sembra più operazioni in background ci sono in uscita())

Quindi,

  1. qual è la differenza tra i due?

  2. In quali situazioni, posso usare exit()?

Credo che ci sia qualcosa in più che mi manca tra i due metodi. Spero che qualcuno possa Spiegare di più e correggermi.

Grazie

EDIT SU RICHIESTA:

realizzare un'applicazione Android con 2 Attività. Chiama la seconda attività dall'attività di avvio utilizzando Intento. Ora, all'interno della seconda attività, con un clic del pulsante, chiama System.exit(0);. "La VM ferma ulteriore esecuzione e il programma uscirà." ???? (secondo documentation)

vedo prima attività lì. Perché? (Si sono invitati a dimostrare che mi sbaglio/sono stato a destra)

+1

http://stackoverflow.com/domande/2033914/smettere-di-application-è-che-aggrottò la fronte-upon. controlla qui le risposte – Raghunandan

+0

@Raghunandan: È una buona idea. Tutti, per favore, date un'occhiata. Ma una grande quantità di informazioni. Qualcuno può dire in breve per adattarsi alla mia materia? – Nizam

+4

non usare mai 'System.exit()' non lo consiglierei. Usa 'finish()'. Per la navigazione è possibile utilizzare il cassetto di navigazione. – Raghunandan

risposta

9

In realtà non vi è alcuna differenza se si dispone di una sola attività. Tuttavia, se si dispone di diverse attività sullo stack, quindi:

  • finitura() - termina l'attività dove è chiamato da e si vede l'attività precedente.
  • System.exit (0) - riavvia l'app con una sola attività in pila. Quindi, se si chiama da ActivityB ActivityA, e System.exit(0) viene chiamato in ActivityB, quindi l'applicazione verrà ucciso e ha iniziato subito con una sola attività ActivityA
13

Secondo Sviluppatore Android -

finish()

chiamata questo quando la vostra attività è fatto e deve essere chiuso. L'attività ActivityResult viene propagata a chiunque ti abbia lanciato tramite onActivityResult().

System.exit(0)

La VM ferma ulteriore esecuzione e il programma uscirà.

+7

System.exit() non uccide la tua app se hai più di una attività in pila. Per favore controllalo. – Nizam

+6

@Nizam: "System.exit() non uccide la tua app se hai più attività nello stack" - sei libero di fornire la prova del tuo reclamo che il processo non è terminato, caricando un'app che dimostra questo comportamento, insieme ai passaggi che hai seguito per confermare che il processo non è stato terminato. – CommonsWare

+6

@CommonsWare Non ho detto che il processo non è terminato. E non so cosa stia succedendo dentro. In astrazione, se sto usando finish() o exit() all'interno di un'attività, viene mostrata l'attività precedente. questo è quello che intendevo per app non uccisa. – Nizam

9

Secondo la documentazione, il programma uscirà.
Ma sembra un errore nella documentazione. Nel caso di un programma java, è corretto. Ma venendo su Android, vedrai la precedente attività dallo stack.

Poiché la codifica di Android viene eseguita utilizzando la codifica java, la maggior parte della documentazione è identica a quella di java.
Da documentazione,

System.exit (0)
La VM ferma ulteriore esecuzione e il programma uscirà.

Per l'aspetto Android, dobbiamo sostituire la parola "programma" con qualcos'altro. Può essere Attività o Contesto.

1

Sa Qada risposta è corretta dopo la mia prova.

finitura chiuderà questa attività e torna a precedente.

ma l'uscita sarà chiudere l'attività corrente troppo e svuotare tutta l'attività in congelare e ricominciare l'attività precedente

In realtà non v'è alcuna differenza se si dispone di una sola attività. Tuttavia, se ci sono diverse attività nello stack, allora:

finish() - termina l'attività da cui viene chiamato e vedi l'attività precedente. System.exit (0): riavvia l'app con una sola attività nello stack.Quindi, se si chiama da ActivityB ActivityA, e System.exit (0) viene chiamato in ActivityB, quindi l'applicazione sarà ucciso e ha iniziato subito con un solo attività ActivityA

Problemi correlati