2010-09-15 13 views
9

In base all'articolo "Fondamenti applicativi", sezione "Ciclo di vita dei componenti", onResume() viene sempre chiamato quando una vista diventa attiva, indipendentemente dallo stato precedente.Android - Tutorial del blocco note - ciclo di vita - alcuni lavori eseguiti due volte?

Nel tutorial Blocco note, Esercizio 3, ho trovato qualcosa di confusione in NoteEdit.java:
C'è una chiamata a populateFields() in onCreate(), così come in onResume().
Non sarebbe sufficiente (o anche meglio) averlo solo in onResume()?

In un piccolo esempio del genere, non farà alcun danno se populateFields() viene eseguita due volte, ma in una più grande App, le cose possono essere diverse ...

Grazie e saluti,
Markus N.

+2

Yepp, penso che chiamarlo solo su Ridesume dovrebbe essere migliore. – icyerasor

+0

non è una risposta, ma se onStop viene chiamato e quindi onRestart, onCreate non verrà chiamato ... continua a non spiegare perché è chiamato onCreate in tutti i lati forse convenzione e leggibilità – CrackerJack9

+0

onCreate è buono per inizializzare i riferimenti a cose, ma si desidera salvare la maggior parte della gestione dello stato per onResume che si nota correttamente è il luogo appropriato. Nota anche che dovresti farlo in un AsyncTask per far felici gli utenti! Il diagramma sulla pagina del ciclo di vita delle attività Android è il miglior riferimento e, se si desidera essere severi, programmare un'attività dello stato macchina, perché ci sono alcune sottigliezze nella giusta combinazione di schermate di commutazione utente, ecc. –

risposta

-1

Posso vedere dove ne hai bisogno in entrambi i posti, se l'applicazione si interrompe, ne avresti bisogno in onResume e se il tuo processo viene ucciso o l'utente torna all'attività allora ne avrai bisogno su onCreate specialmente se stai facendo un po ' pre-elaborazione.

Per la documentazione .... per onResume() si consiglia di utilizzarlo per le chiamate leggeri a differenza onCreate():

"La vita in primo piano di un'attività avviene tra una chiamata a onResume() fino a quando un corrispondente chiamata a onPause(). Durante questo tempo l'attività è di fronte a tutte le altre attività e interagisce con l'utente.Un'attività può frequentemente andare tra gli stati ripresi e in pausa - ad esempio quando il dispositivo va a dormire, quando un'attività risultato viene consegnato, quando viene consegnato un nuovo intento, quindi il codice in questi metodi dovrebbe essere abbastanza leggero. "

The N l'app di otepad potrebbe volere una variabile dichiarata se il metodo è già stato colpito da onCreate per non ripetere in onResume().

+0

onResume è sempre chiamato (anche quando il processo viene ucciso e l'attività viene ricreata). –

+0

Sì, ma gli utenti potrebbero aver bisogno di fare qualcosa sul onCreate prima di layout simili e così, quindi perché potrebbe essere necessario chiamare anche quella funzione. – JPM

+0

Giusto. onCreate è il posto giusto per creare istanze di layout e simili. Stavo semplicemente dicendo che se onCreate viene chiamato, onResume sarà sempre chiamato dopo di esso. –

1

Da uno sguardo a Notepad3, direi che hai ragione. Non sembra esserci alcuna ragione per loro di chiamare populateFields() in entrambi onCreate() e onResume(). onResume è sufficiente.

Problemi correlati