2011-09-30 8 views

risposta

2

Non penso che ci sia alcuna differenza. sebbene con System.exit(), dovresti chiamare runFinalizersOnExit prima

+2

'runFinalizersOnExit' non è sicuro: http://developer.android.com/reference/java/lang/Runtime.html#runFinalizersOnExit(boolean) – Budda

2

Che cosa dovremmo usare?

Nessuno, leggere questo Is quitting an application frowned upon?

+8

Lascia che lo sviluppatore faccia ciò che sta per fare. Se fa un cattivo programma nessuno lo userà o sono sicuro che lo sviluppatore sta facendo la cosa giusta. Basta non inserire una non risposta alla domanda, utilizzare invece i commenti. – MinceMan

+1

Inoltre, a volte non è compito dello sviluppatore, ma qualcuno di livello superiore lo richiede –

0

Nessuno dei due. Usa finish(). Vedere this e il link aromero consigliato. Lascia che Android faccia ciò che è destinato a fare: gestisci il tuo ciclo di vita dell'attività. È stato progettato in questo modo per una ragione.

2

Sembra che System.exit() sia altrettanto buono sotto ogni punto di vista come kill, ma molto più semplice e meno dipendente da altre cose.

Alcuni hanno suggerito che runFinalizersOnExit sia impostato ma in base ai documenti che sono considerati non sicuri e che sono stati eliminati a partire da 1.0, quindi presumo che ignori quella parte.

Contrariamente ad altri suggerimenti, finish() non termina il processo Linux che esegue l'app e non libera tutta la memoria utilizzata dall'app.

Concesso, Android è progettato in modo che per molti casi non vi sia alcun particolare bisogno di uscire effettivamente da un'app (al costo di una breve pausa in seguito, Android ucciderà le vecchie app quando ha bisogno di memoria) - tuttavia se si vuoi per qualsiasi ragione uccidere la tua app. System.exit() sembra essere il modo idea. Spegne la macchina virtuale java che sta eseguendo la tua app, quindi tutte le risorse, la memoria e i thread saranno completamente svuotati.

(Si noti che è possibile specificare nel file manifest che alcuni thread devono essere eseguiti in diversi processi linux - nel qual caso System.exit() probabilmente ucciderebbe solo parte della propria app, ma sono cose più avanzate.)

In effetti, ho appena eseguito adb shell ps|grep app e vedo l'app di esempio com.example.android.lunarlander che non ho eseguito in circa una settimana - ancora in memoria, che occupa ancora quasi 100000 byte di memoria .