Il ciclo di vita di un’attività – Lezione 12 di Android

I metodi di un’attività: onCreate, onStart, onResume, onPause, onStop, onRestart e onDestroy

In Android un’attività dopo essere stata creata può assumere diversi stati. Per un suo corretto funzionamento è consigliato rispettare il diagramma del ciclo di vita di un’attività messo a disposizione da Google e rappresentato nella seguente figura:

Ciclo di vita di un'attività in Android

Il ciclo di vita di un’attività è costituita da una serie di stati e transizioni: quando l’utente interagisce con essa si trova in cima allo stack; altrimenti, l’attività può essere ibernata se non viene utilizzata o può essere terminata se non è più in cima allo stack e contemporaneamente non è visibile all’utente.

Analizziamo nel dettaglio il ciclo di vita di un’attività in Android:

  1. onCreate, rappresenta la prima funzione che viene avviata al momento della creazione dell’attività e consente di inizializzare lo stato iniziale della stessa. La sua intestazione è la seguente:
      protected void onCreate(android.os.Bundle savedInstanceState)


    Il metodo onCreate() richiede un unico argomento, savedInstanceState, che viene utilizzato per comunicare eventualmente alla nuova activity creata lo stato di una precedente activity ormai terminata. L’argomento è null se non si vuole comunicare nulla su precedenti stati alla nuova activity.

  2. onStart(), questo metodo viene utilizzato come una flag per indicare al programmatore che l’attività appena creata sta per essere visualizzata sullo schermo. Per poter utilizzare onStart() non è richiesto nessun argomento:
      protected void onStart()

  3. onResume() serve ad indicare che l’attività sta per iniziare l’interazione con l’utente, verrà quindi posta in cima allo stack. La sua intestazione è la seguente:
      protected void onResume()

  4. onPause(), quando viene chiamato questo metodo un’altra attività sta per diventare top dello stack e l’interazione tra l’utente e la vecchia attività sono terminate. Quando viene chiamata onPause bisogna salvare lo stato dell’interfaccia grafica in modo da poterlo ripristinare se richiesto. La sua dicitura completa è:
      protected void onPause()


    Quando un’attività va in “pausa”, può essere riattivata con onResume() oppure può essere terminata del tutto.

  5. onStop(), viene utilizzato per non rendere più visibile all’utente l’attività su cui viene lanciato, in questo modo non bisogna più preoccuparsi di tenere l’interfaccia grafica aggiornata. Un’attività che viene stoppata può essere riattivata oppure essere uccisa dal sistema se c’è bisogno di maggiore spazio in memoria.
      protected void onStop()

  6. onRestart(), il metodo onRestart segnala al programmatore che l’attività precedentemente stoppata sta per essere riattivata e sta per tornare in cima allo stack:
      protected void onRestart()

  7. onDestroy(), il metodo onDestroy rappresenta l’ultima fase del ciclo di vita di un’attività ed indica che l’istanza di quell’attività sta per essere eliminata dal sistema. Questo metodo rappresenta l’ultima occasione di poter salvare i dati dell’attività prima che venga distrutta definitivamente. Ecco la sua intestazione completa:
      protected void onDestroy()


    Quando si avvia il metodo onDestroy(), la memoria viene deallocata e il processo o verrà ucciso o verrà inserito in un pool di processi vuoti per poter essere riutilizzato.

Quattro fasi di un’attività: la creazione, l’ibernazione, la sospensione e la fase di salvataggio e distruzione

E’ buona norma, ogni qualvolta si utilizza uno di questi metodi è quella di richiamare sempre l’implementazione base del metodo con super in modo da affidare al sistema vari compiti come l’inizializzazione dell’interfaccia. Facciamo un esempio, con il metodo onStart() scriveremo:

  protected void onStart() {
    super.onStart(); // Richiamo il metodo base contenuto nella superclasse
    // ...
  }

Il ciclo di vita di un’attività in Android può essere suddiviso in quattro grandi fasi, la prima riguarda la creazione di una nuova attività:

Ciclo di un'attività appena creata in Android

La seconda fase avviene quando un’attività viene messa in pausa:

Ciclo di un'attività messa in pausa in Android

Se un’attività viene sospesa potrebbe essere stoppata:

Ciclo di un'attività stoppata in Android

Infine l’ultima fase del ciclo di vita di un’attività riguarda il salvataggio dello stato di un’attività:

Salvataggio dello stato di un'attività in Android

In particolare, in quest’ultima fase per poter salvare lo stato di un’activity viene utilizzato il metodo onSaveInstanceState() che viene chiamato automaticamente dal sistema prima di onStop() e di onPause(). Grazie a onSaveInstanceState() abbiamo la possibilità di poter salvare lo stato dell’attività per poterla poi ripristinare in modo corretto quando richiesto. Questo metodo non verrà chiamato se l’utente abbandona l’activity premendo il tasto “Indietro”, dovremo quindi utilizzare i restanti metodi per salvare lo stato dell’attività.
I dati richiesti da questo metodo sono rappresentati da un Bundle costituito da insieme di coppie chiave-valore in cui bisogna salvare i dati. Il Bundle salvato verrà passato come argomento al metodo onCreate() quando l’attività dovrà essere ripristinata e sarà passato anche al metodo onRestoreInstanceState() che verrà chiamato dal sistema dopo onStart().

Android all’interno della classe Activity mette a disposizione un’implementazione base per il salvataggio e il ripristino dello stato di un’activity. Richiamando il metodo onSaveInstanceState() della superclasse il sistema si occuperà di scorrere l’intero layout dell’attività ed inserisce nel Bundle lo stato di tutte le View del layout (verranno memorizzate solo le View con un campo id). In conclusione richiamando super.onSaveInstanceState(), avremo la possibilità di poter salvare in automatico le interfacce grafiche dell’attività, al programma non resta che salvare (se necessario) i restanti dati non ancora memorizzati.

Trovate maggiori informazioni sulla classe Activity nella guida ufficiale di Android.

Indice Lezione PrecedenteLezione Successiva

Pubblicato in Android, Android, Google, Guide, Informatica, Programmazione Taggato con: , , , , , , , , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*