Domanda

dovrebbe ottenere dati tramite un cursore e compilare i dati sullo schermo, come ad esempio l'impostazione del titolo della finestra, in onStart() o onResume()?

onStart() sembrerebbe il posto più logico perché dopo onStart() l'attività può già essere visualizzato , anche se in background. In particolare ho avuto un problema con un gestita dialogo che mi ha fatto ripensare questo. Se l'utente ruota lo schermo mentre la finestra è ancora aperta, e onCreateDialog() onPrepareDialog() sono chiamati tra e onStart() onResume(). Se le esigenze di dialogo per basarsi sui dati è necessario avere i dati prima onResume().

Se sono corrette su onStart() allora perché il Blocco note esempio dare un cattivo esempio facendo in onResume()? Vedere http://developer.android. com / risorse / campioni / Agenda / src / com / es / android / notepad / NoteEditor.html NoteEditor.java linea 176 (title = mCursor.getString...).

Inoltre, che cosa se i miei lanci Attività altro / Dialog actvity che cambia i dati di mio cursore sta monitorando. Anche nel caso più semplice, questo significa che devo manualmente Aggiorna la mia schermata precedente (un listener per una finestra di dialogo l'attività principale), o in alternativa che devo registrare un ContentObserver, dal momento che' m non è più l'aggiornamento dei dati in onResume () (anche se ho potuto aggiornare due volte, naturalmente)? ??

Lo so che è una domanda semplice, ma il dialogo solo di recente, con mia grande sorpresa, mi ha fatto capire questo.

È stato utile?

Soluzione

Per rispondere alla tua domanda circa NoteEditor, è sufficiente dare un'occhiata alle linee sopra quello che citi e vedrai ...

    // Requery in case something changed while paused (such as the title)
    mCursor.requery();

Il commento sembra spiegare tutto. Anche se non ho passato attraverso l'esempio NotePad me stesso, appare l'autore (s) stanno costruendo nella capacità di recuperare da cambiamenti mentre il NoteEditor è in pausa (e poi riprese).

Come GSree spiega (mentre stavo scrivendo questo), non c'è un risposta giusta o sbagliata e semplicemente dipende da ciò che deve essere fatto a che punto del ciclo di vita di attività.

Altri suggerimenti

Anche in questo caso la soluzione dipende da ciò che più vi si addice.

Se si desidera che il cursore precompilabili una volta per ogni applicazione (e non disturbato alcun cambiamento, allora si può farlo in onCreate (). Questo metodo verrà richiamato solo se il processo di applicazione è ucciso e app è riavviata .

Se si desidera che il cursore sia ogni volta precompilato la durata inizia visibili (maggior parte dei casi un servizio / broadcast sta chiamando la vostra attività, è necessario utilizzare onStart ()

Se si desidera che il cursore sarà precompilato per ogni piano ai cicli di vita di attività, è necessario utilizzare onResume (). Quindi, se si dispone di una finestra di dialogo o di un altro subattività modificare alcune informazioni e quindi si desidera ricaricare il cursore, è meglio farlo in onResume (). L'inconveniente di questo metodo è ogni volta l'attività viene in primo piano il cursore viene ricaricato.

Spero che questo rende chiaro

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top