2010-04-24 13 views
8

Ho letto che è importante chiamare setContentView() presto in un'attività dato che produce gli oggetti vista che possono essere manipolati da codice successivo in onCreate().operazione setContentView Android

In termini di ciclo di vita, fa la vista vengono disegnati per lo screening non appena setContentView() viene chiamato, o consente la funzione onCreate() per costruire/popolano le informazioni negli oggetti di visualizzazione, e attendere per disegnare in realtà dopo aver completato onCreate()?

Grazie!

risposta

9

fa la vista ottenere attratti da schermo come appena setContentView() viene chiamato

No.

o consente la funzione di per costruire/populate onCreate() le informazioni negli oggetti vista e attendi per disegnarlo effettivamente dopo onCreate() completato?

Sì. Gli oggetti View vengono creati immediatamente come parte di setContentView(). Tuttavia, tutte le operazioni di disegno (da onCreate() o da qualsiasi altra parte) provocano realmente l'inserimento di messaggi in una coda di messaggi attraverso cui passa il thread dell'applicazione principale.

+0

Grazie! Puoi indicarmi una buona risorsa per spiegare in modo più approfondito la coda di messaggi che il thread principale dell'applicazione processa? Questo è un nuovo concetto per me, dato che sto appena iniziando la programmazione Android. – stormin986

+2

Non c'è molto scritto a riguardo direttamente. La regola generale è: se si modifica lo schermo, il cambiamento dello schermo attuale non ha effetto quando si chiama il metodo (per esempio, 'setText()' su un 'TextView'). Piuttosto, la chiamata al metodo crea un oggetto che rappresenta la richiesta, che va nella coda dei messaggi. Quella coda viene elaborata quando il thread dell'applicazione principale non è legato all'esecuzione del codice (ad esempio, onCreate() '). Questo è il motivo per cui ti viene detto di tenere le cose di lunga durata fuori dal thread dell'applicazione principale. – CommonsWare

+2

Questo è probabilmente ovvio ai più, ma come un principiante ho trovato questo utile pure (dalla documentazione dell'oggetto Handler), in quanto non ero a conoscenza di una tale coda di messaggi: "Quando si crea un processo per la vostra applicazione , il suo thread principale è dedicato all'esecuzione di una coda di messaggi che si occupa di gestire gli oggetti applicativi di alto livello (attività, riceventi per la radiodiffusione, ecc) e le eventuali finestre che creano." – stormin986