2010-06-14 15 views
7

Sono interessato al ciclo di vita delle attività Android e vorrei ottenere una descrizione/documentazione/riferimento più dettagliata rispetto alla base ampiamente disponibile (onCreate-> onStart-> onResume) one.Ciclo di vita di attività Android dettagliato (onAttachedToWindow())

La mia necessità deriva dal rendermi conto che l'avvio di una nuova attività (Theme.Dialog in stile) da onAttachedToWindow() migliora notevolmente il tempo di risposta se si confronta con l'avvio da onCreate(). Mi chiedo come questo onAttachedToWindow() si adatti all'intero ciclo di vita delle attività Android. Descrizione della descrizione ufficiale dell'API "Chiamato quando la finestra è stata collegata al gestore della finestra" non è di grande aiuto.

+0

Se volete vedere come si adatta con gli altri metodi, si potrebbe ignorare ognuno dei metodi e aggiungere alcune dichiarazioni di stampa. –

+0

Sì, l'ho fatto (onAttachedToWindow() va dopo onResume()). Ma ciò non dà la risposta a * cosa succede esattamente? * E * perché tale differenza nella reattività? *. – Ralkie

+0

Quando viene avviato esattamente l'evento OnCreate? Quando imposto un punto di interruzione all'inizio dell'evento OnCreate, l'app viene eseguita e carica l'attività sullo schermo, quindi viene attivato il punto di interruzione e l'app viene messa in pausa. Ho bisogno di un evento sull'attività che si attiva esattamente prima dell'attività inizializzata e avviata. –

risposta

4

La mia ipotesi sul motivo per cui mi sento più reattivo, in cima alla mia testa: penso che se si avvia l'attività B da onCreate() dell'attività A, l'attività A non viene disegnata prima dell'avvio dell'attività B, che potrebbe richiedere un altro secondo o due (rendendo l'app si senta meno reattiva), dove se si avvia l'attività B in Attività A'sAttachedToWindow(), A viene avviato e renderizzato prima che B venga avviato, quindi l'utente non deve sedersi per un secondo con un schermo vuoto o attività pre-A prima di vedere una reazione alla loro azione.

+0

La tua spiegazione sembra corrispondere a ciò che sta accadendo, ma non riesco ancora a capire perché fare * più lavoro * (pre-A> A.onCreate(), A.onStart(), A.onResume(), A. onAttachedToWindow()> B) è più veloce di avviare B da A.onCreate() (pre-A> A.onCreate()> B). Il tempo di caricamento da pre-A a B è rispettivamente <1s e ~ 7s. – Ralkie

0
  1. All'avvio dell'attività, viene chiamato il metodo onCreate(). Nel metodo onCreate() si esegue la logica di avvio di base che dovrebbe verificarsi una sola volta per l'intera durata dell'attività.

  2. Dopo l'esecuzione di onCreate(), viene chiamato il metodo onStart(). Questo metodo rende visibile l'attività mentre l'app prepara l'attività per entrare in primo piano e diventare interattiva.

  3. Dopo l'esecuzione di onStart(), viene chiamato il metodo onResume(). Questo metodo viene chiamato solo quando l'app è nello in primo piano perché questo è lo stato in cui l'app interagisce con l'utente. L'app rimane nello stato ripristinato (o in esecuzione) finché qualcosa non si focalizza sull'app.

  4. Se un'altra attività entra in in primo piano, viene chiamato il metodo onPause(). L'app è in pausa se è ancora visibile. Questo metodo mette solo in pausa le operazioni dell'attività. Non distrugge. L'attività rimane in stato di pausa finché l'attività non riprende o diventa completamente invisibile all'utente. 4a. Se l'utente ritorna all'attività, viene chiamato di nuovo il metodo onResume()onResume(). 4b. la procedura dell'app può essere interrotta dallo stato di pausa se le app con priorità più alta necessitano di memoria. Se l'utente ha bisogno per tornare a app dopo che è stato ucciso, il metodo onCreate() viene chiamato di nuovo

  5. Se l'attività non è più visibile per l'utente, il metodo onStop() viene chiamato. Quando l'attività viene interrotta, l'oggetto attività viene tenuto in memoria e conserva tutti gli stati e le informazioni ma non è collegato al gestore finestre. 5a. se l'utente torna all'attività, viene chiamato il metodo onRestart() seguito dal metodo onStart(). 5b. la procedura dell'app può essere interrotta dallo stato di arresto se le app con priorità più alta necessitano di memoria.Se l'utente deve tornare all'app dopo che è stato ucciso, viene chiamato di nuovo il metodo onCreate().

  6. Se l'attività sta terminando o viene interrotta dal sistema, viene chiamato il metodo onDestroy(). L'app non è inizialmente chiusa. Il sistema chiama questo metodo perché l'attività sta terminando a causa della chiamata di qualcuno finish() o perché il sistema sta temporaneamente distruggendo il processo che contiene l'attività per risparmiare spazio. Il sistema può anche chiamare questo metodo quando si verifica un cambiamento di orientamento e quindi chiamare immediatamente onCreate() per ricreare il processo (e i componenti che contiene) nel nuovo orientamento. Il metodo onDestroy() rilascia tutte le risorse che non sono ancora state rilasciate con metodi precedenti come onStop().

L'intera vita di un'attività avviene tra la prima chiamata a onCreate() attraverso una singola chiamata finale onDestroy().

durata visibile di un'attività tra una chiamata a onStart() fino a una chiamata a onStop().

Il primo piano vita di un'attività accade tra una chiamata a onResume() fino a quando una chiamata al onPause().

L'unico metodo che dobbiamo implementare è onCreate(). Gli altri sono chiamati automaticamente. Ma possiamo implementarli noi stessi per dire all'app cosa fare durante quei processi.

https://developer.android.com/guide/components/activities/activity-lifecycle.html#asem

onAttachedToWindow è chiamato quando la visualizzazione è attaccato ad una finestra. A questo punto ha una superficie e inizierà a disegnare.

https://developer.android.com/reference/android/view/View.html#onAttachedToWindow()

Problemi correlati