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.
fonte
2012-03-29 22:17:09
"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
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. –
Oh, senza dubbio, le attività a tema di dialogo sono insolite. – CommonsWare