Nel post precedente, hai appreso che Intents ci ha permesso di inviare messaggi da un componente Android a un altro. Bene, un tipo molto importante di componente è un'attività.
Le attività sono una parte fondamentale dello sviluppo di app Android. Ed è impossibile capire le attività senza comprendere anche i loro cicli di vita. In questo post, imparerai tutto sul ciclo di vita dell'Attività.
Un'attività è una singola schermata in Android. È come una finestra in un'applicazione desktop o una cornice in un programma Java. Un'attività consente di posizionare tutti i componenti dell'interfaccia utente o i widget sullo schermo.
È importante capire che un'attività ha un ciclo di vita: vale a dire che può trovarsi in uno dei diversi stati, a seconda di cosa sta accadendo con l'app e dell'interazione dell'utente.
Diamo un'occhiata più da vicino al ciclo di vita di un'attività Android. Ogni volta che lo stato dell'attività cambia, uno dei seguenti metodi del ciclo di vita verrà chiamato nella classe Attività.
onCreate ()
: Questo viene chiamato quando l'attività viene prima inizializzata. È necessario implementare questo metodo per eseguire qualsiasi inizializzazione specifica per la propria attività.
onStart ()
: Questa è chiamata la prima volta che l'attività sta per diventare visibile all'utente, poiché l'attività si prepara a venire in primo piano diventa interattiva. Al termine di questa richiamata, il onResume ()
il metodo sarà chiamato.
onResume ()
: Quando l'attività entra in questo stato, inizia a interagire con l'utente. L'attività continua in questo stato fino a quando qualcosa accade di focalizzarsi sull'app o sull'attività (come una chiamata in arrivo). Quando ciò accade, il onPause ()
il metodo sarà chiamato.
onPause ()
: Questo metodo viene utilizzato per sospendere le operazioni che non dovrebbero verificarsi quando l'attività è in pausa. Una chiamata a questo metodo indica che l'utente sta lasciando l'app. Ad esempio, in un'app di un lettore musicale, una chiamata in arrivo farà sì che l'app passi allo stato di pausa. Questo dovrebbe silenziare o mettere in pausa la musica attualmente in riproduzione. Quando l'utente torna all'app, il onResume ()
il metodo sarà chiamato.
onStop ()
: Questo metodo viene chiamato quando l'attività non è più visibile nell'app. Può accadere, ad esempio, quando un'altra attività è stata caricata e sta prendendo lo schermo intero del dispositivo. Quando viene chiamato questo metodo, si dice che l'attività si trova in uno stato di arresto. In questo stato, il sistema chiama o onRestart ()
riportare l'interattività con l'attività. O chiama il OnDestroy ()
metodo per distruggere l'attività.
OnDestroy ()
: Questo viene chiamato prima che l'attività venga distrutta. Il sistema chiama questo metodo quando un utente termina l'attività o perché il sistema sta temporaneamente distruggendo il processo che contiene l'attività per risparmiare spazio. Assicurati di liberare tutte le risorse che la tua attività ha creato con questo metodo, altrimenti la tua app presenterà una perdita di memoria!
onRestart ()
: Questo viene richiamato quando un'attività si riavvia dopo che è stata interrotta.
La maggior parte delle interazioni dell'utente con un'app causa la modifica dell'attività attiva. Quindi un'app passa da un'attività all'altra molte volte nel corso della sua durata.
È necessario collegare le attività insieme quando un'attività deve iniziare un'altra attività. Per iniziare un'attività, la usi startActivity ()
o startSubActivity ()
. Devi passare un intento in entrambi i casi.
startActivity ()
viene utilizzato se l'attività appena avviata non ha bisogno di restituire un risultato.
Il seguente frammento di codice mostra come avviare un'altra attività utilizzando questo metodo:
Intento intento = nuovo intento (questo, SecondActivity.class); startActivity (intento);
È inoltre possibile eseguire azioni quali il trasferimento di dati da un'attività all'altra. In questo caso, la tua attività corrente (l'attività di chiamata) vuole passare ai dati un'attività di destinazione. È qui che gli Intenti tornano utili. Per informazioni sull'utilizzo di Intents per avviare un'attività, consulta il mio articolo precedente.
startSubActivity ()
viene utilizzato per avviare un'altra attività e prevede di recuperare i dati dall'attività appena avviata. In altre parole, utilizzalo quando vuoi ottenere un risultato dall'attività target all'attività chiamante, ad es. se l'attività di destinazione sta raccogliendo alcune informazioni utente in una finestra di dialogo modale.
Riceverai il risultato dall'Attività nel onActivityResult (int requestCode, int resultCode, Intent data)
metodo. Il risultato sarà restituito come intento.
Ecco un esempio per mostrare come funziona l'attività.
In primo luogo, crei il tuo Attività principale
con il tuo onCreate ()
metodo, un file di layout e un codice di richiesta.
public class MainActivity estende Activity // Codice di richiesta univoco per ogni caso d'uso statico finale privato int REQUEST_CODE_EXAMPLE = 0x9345; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);
Nel tuo onCreate ()
metodo, creerai una nuova istanza di intento per avviare la tua seconda attività.
Quando sei pronto per iniziare tale attività, ad esempio in risposta a un clic del pulsante, chiamerai startSubActivity ()
, che passerà l'intento appena creato e il codice di richiesta.
// Crea una nuova istanza di Intent per avviare SecondActivity final Intent intent = new Intent (this, SecondActivity.class); // Questo avvia SecondActivity con il codice di richiesta startActivityForResult (intent, REQUEST_CODE_EXAMPLE);
Comunque, nel tuo Attività principale
, è necessario gestire gli eventi del risultato dell'attività. Lo fai implementando il onActivityResult ()
metodo. Questo è il modo in cui riceverai il risultato dall'altra attività.
Ecco come dovrebbe apparire:
// onActivityResult viene chiamato // quando l'altra attività precedentemente avviata utilizza startActivityForResult @Override public void onActivityResult (int requestCode, int resultCode, Intent data) super.onActivityResult (requestCode, resultCode, data); // Per prima cosa dobbiamo verificare se il codice requestCode corrisponde a quello che abbiamo usato. if (requestCode == REQUEST_CODE_EXAMPLE) // Il resultCode è impostato da SecondActivity // Per convenzione RESULT_OK significa che qualsiasi cosa // La proprietà SecondActivity è stata eseguita correttamente if (resultCode == Activity.RESULT_OK) // Ottieni il risultato dal reso Intent final String result = data.getStringExtra (SecondActivity.EXTRA_DATA); // Usa i dati - in questo caso, visualizzali in un toast. Toast.makeText (this, "Result:" + result, Toast.LENGTH_LONG) .show (); else // setResult non è stato eseguito correttamente da SecondActivity // A causa di qualche errore o flusso di controllo. Nessun dato da recuperare.
Ora vai avanti e crea il tuo SecondActivity
. Dovrebbe sembrare qualcosa di simile al codice qui sotto.
@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_detail); pulsante Button finale = (Button) findViewById (R.id.button); // Quando si fa clic su questo pulsante, si desidera restituire un risultato button.setOnClickListener (new View.OnClickListener () @Override public void onClick (Visualizza vista) // Crea un nuovo oggetto Intent come contenitore per il risultato finale Intent data = new Intent (); // Aggiungi i dati richiesti da restituire a MainActivity data.putExtra (EXTRA_DATA, "Alcuni dati interessanti!"); // Imposta il resultCode come Activity.RESULT_OK su // indica un successo e allega l'intento // che contiene i nostri dati di risultato setResult (Activity.RESULT_OK, data); // Con finish () chiudiamo SecondActivity in // return back MainActivity finish (););
Prima che un'attività si chiuda, verranno chiamati i corrispondenti metodi del ciclo di vita.
Il onPause ()
il metodo dovrebbe interrompere tutti gli ascoltatori e gli aggiornamenti dell'interfaccia utente. Il onStop ()
il metodo dovrebbe salvare i dati dell'applicazione. Finalmente, il OnDestroy ()
metodo libererà tutte le risorse che l'attività ha allocato.
Quando l'utente torna a un'app che è stata terminata dal sistema, il onResume ()
il metodo è chiamato. In base ai dati salvati, può registrare nuovamente i listener e attivare gli aggiornamenti dell'interfaccia utente.
Un'attività necessita di un modo per conservare dati preziosi sullo stato e sugli utenti che ha ottenuto. Questi dati potrebbero essere ottenuti dall'input dell'utente o creati mentre l'attività non era sullo schermo.
Ad esempio, una modifica dell'orientamento del dispositivo può causare la distruzione e la ricreazione di un'attività. In tale scenario, è necessario assicurarsi di salvare tutto lo stato di attività prima che venga distrutto e ricaricarlo di nuovo quando viene ricreato. Altrimenti, qualsiasi dato che la tua attività ha in quel momento può essere completamente perso.
Per salvare lo stato di attività, puoi ignorare il onSaveInstanceState ()
metodo. Questo metodo è passato a impacchettare
oggetto come parametro. Un pacchetto può contenere stringhe, tipi di dati primitivi o oggetti. In questo metodo, è sufficiente aggiungere qualsiasi dato di stato importante al pacchetto. Questo pacchetto verrà restituito all'attività in un secondo momento in modo da poter ripristinare lo stato di attività.
Per estrarre lo stato salvato dal bundle e ripristinarlo, implementare il onRestoreInstanceState ()
metodo. Questo callback è invocato tra il onStart ()
e il onResume ()
metodi del ciclo di vita.
Analizzeremo in dettaglio lo stato di istanza di attività in un prossimo articolo.
Dopo aver seguito questo post, avrai una buona comprensione di come funziona un ciclo di vita dell'Attività. E hai imparato che ci sono due modi per avviare un'attività, oltre ad ottenere alcuni indicatori su come viene gestito lo stato dell'istanza nel ciclo di vita dell'Attività.
Grazie per la lettura e mentre sei qui, dai uno sguardo ad alcuni dei nostri altri post sulla codifica delle app per Android.