2012-03-29 18 views
14

Ho letto diversi post che descrivono la differenza tra onStart() e onResume(): onStart() viene chiamato quando l'attività diventa visibile, onResume() viene chiamato quando l'attività è pronta per l'interazione da parte dell'utente. bene.android: quando utilizzare onStart(), onStop()?

Ho sempre aggiunto il codice a onPause() e onResume() e non mi sono mai preoccupato di onStart() e onStop().

Qualcuno può dare alcuni esempi concreti di cosa si potrebbe fare in onStart(), rispetto a onResume()? Lo stesso vale per onStop() e onPause(), come è utile onStop()? Devo mancare qualcosa di fondamentale qui.

risposta

9

onStop() sarà (per esempio) essere chiamata quando si lascia l'attività per qualche altra attività (edit:. Quasi vedere commonswares commento sulle attività a tema di dialogo). Ad esempio se si utilizza startActivity() nell'attività A per avviare l'attività B. Quando si preme di nuovo nell'attività B, si tornerà all'attività A e verrà chiamato onStart.

Questo differisce da alcuni dei motivi per cui può essere chiamato senza onStop chiamato. Se, ad esempio, si interrompe lo schermo o si preme il pulsante stand-alone , ma probabilmente non è onStop (a seconda della memoria disponibile e quant'altro), quindi è una "pausa più leggera". onStop sarà probabilmente chiamato eventualmente anche in questo caso, ma non immediatamente.

Ok, ma a che serve

spesso non c'è uso specifico, ma ci potrebbe essere. Dato che le tue attività manterranno lo stato della memoria nello stack anche dopo l'avvio di qualche altra attività, tale stack aumenterà con il numero di attività avviate (altezza dello stack). Ciò può comportare l'utilizzo di memoria di grandi dimensioni in alcune applicazioni. Dopo un po 'il framework entrerà in azione e ucciderà alcune attività in pila, ma questo è piuttosto spigoloso e probabilmente significherà che molti stati saranno mantenuti al loro ritorno.

Quindi un esempio di utilizzo per onStart/onStop è se si desidera rilasciare qualche stato quando si lascia un'attività per un altro e ricrearlo quando si ritorna. L'ho usato per impostare listadapter su cache di immagini vuote, vuote e simili (in applicazioni molto specifiche). Se si desidera liberare la memoria utilizzata dalle viste visibili in un listadapter, è possibile ricrearla in onstart e lasciare che le viste vengano rilevate dal gc. Ciò aumenterà la probabilità che il resto dello stato di memoria dell'attività vivrà.

Alcune risorse possono essere considerate sufficienti per il salvataggio mentre l'istanza dell'attività è attiva e altre solo quando si trova nella parte anteriore dello stack. Spetta a te decidere cosa è meglio nella tua applicazione e la granularità di creare/avviare/riprendere ti dà quello.

+2

"onStop() verrà chiamato quando lasci l'attività per qualche altra attività" - in realtà, verrà chiamato quando l'attività non è più visibile. Se un'attività in tema di dialogo arriva in primo piano, 'onStop()' non viene chiamato. – CommonsWare

+0

Buon punto. L'attività di chiamata potrebbe essere ancora visibile in background in quell'esempio (e quindi il riciclaggio di materiale sarebbe negativo). Stavo mostrando un esempio di dove accade e di come l'ho usato per ridurre l'utilizzo della memoria, ma questa è una buona esenzione. Come regola generale è ancora buono. Devo ancora vedere pile di attività di dialogo che si chiamano a vicenda. –

+0

Oh, senza dubbio, le attività a tema di dialogo sono insolite. – CommonsWare

0

Penso che la tua domanda è piuttosto spiegata qui sul doc: leggere sul Activity Life Cycle

+0

'onStart()' funziona dopo che 'onCreate()' abbia terminato il suo compito. 'onResume()' funziona quando torni al tuo 'Intento' o' Attività' premendo il pulsante indietro. –

+1

@ Hamza non è vero. ogni volta che la tua attività passa da non visibile a visibile, viene chiamato onStart(). –

+0

Nessun uomo! Ho fatto onStart() sulla mia applicazione. Era perché, volevo recuperare i dati dal webservice dopo aver caricato l'attività. Controlla questo tramite la Guida Android [collegamento] (http://developer.android.com/reference/android/app/Activity.html) –

1

onStart() funziona dopo onCreate() ha terminato l'attività. È un buon posto dove mettere un broadcastReceiver o inizializzare qualche stato sull'interfaccia utente che dovrebbe essere visualizzato in modo coerente ogni volta che l'utente torna a questa attività.

onResume() funziona quando si ritorna alla propria intenzione o attività premendo il pulsante Indietro.Quindi onPause verrà chiamato ogni volta che un'attività diversa viene in primo piano.

Problemi correlati