androidGeek.it
Un blog italiano sul mondo Android



Tutorials

28 aprile 2012

Capire le Activity ed il ciclo di vita di un’applicazione Android

More articles by »
Written by: Luka
Tag:, ,
android-activity-lifetime

Nelle precedenti guide abbiamo visto come creare la vostra prima applicazione android e cosa contiene la struttura delle cartelle creata di default da eclipse. In questa guida ci concentreremo sulle Activity e sul ciclo di vita di un’applicazione Android, concetti fondamentali se volete intraprendere la strada della programmazione android.

Cos’è un’Activity?

Un’activity è in parole povere una finestra che contiene l’interfaccia dell’applicazione. Un’applicazione può avere una o più activity. Lo scopo principale di un’activity è gestire l’interazione tra l’utente e l’applicazione. Dal momento in cui lanciamo l’applicazione fino al momento in cui la mandiamo in background, l’activity passa attraverso varie fasi, da qui il ciclo di vita di un’app android. Capire il ciclo di vita di un’activity è fondamentale per assicurare un corretto funzionamento della vostra applicazione.

Quando creaiamo un progetto android, Eclipse crea automaticamente per noi l’activity:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;     

public class HelloWorldActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }     

}

Come vedete la nostra classe HelloWorldActivity estende la super classe Activity ed il metodo onCreate si occupa di implementare l’interfaccia della classe padre, caricando la UI definita nel nostro file res/layout/main.xml (in realtà potete chiamarlo come vi pare) attraverso l’istruzione setContentView(R.layout.main); .

Il ciclo di vita di  un’applicazione android

La super classe Activity definisce una serie di eventi che governano il ciclo di vita di un’activity. Spetta poi alle classi che estendono da Activity implementarli. Questi eventi sono:

  • onCreate() — chiamato quando l’activity viene lanciata per la prima volta
  • onStart() — chiamato quando l’activity diventa visibile all’utente
  • onResume() — chiamato quando l’activity inizia ad interagire con l’utente
  • onPause() — chiamato quando l’attuale activity viene messa in pausa e un’activity precedente viene ripristinata
  • onStop() — chiamato quando l’activity non è più visibile all’utente
  • onDestroy() — chiamato prima che l’activity venga distrutta (manualmente o dal sistema operativo per liberare memoria)
  • onRestart() — chiamato dopo che l’activity era stata stoppata e quando è pronta ad essere ripristinata

Meglio di 100 parole questo grafico vi aiuterà a capire il ciclo di vita di un’activity:

Ciclo di vita di un'activity

Ciclo di vita di un'activity, preso da http://developer.android.com/guide/topics/fundamentals/activities.html

 

Esercizio

Proviamo a capire il ciclo di vita di un’activity con un esercizio. Caricate Eclipse e create un nuovo progetto chiamato HelloWorldActivity, proprio come fatto nella precedente guida. La versione dell’applicazione android non è importante ai fini di questo esercizio.

Aprite il file HelloWorldActivity.java e aggiungete:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class HelloWorldActivity extends Activity {
    /** Called when the activity is first created. */
	String tag = "CicloDiVita";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.d(tag, "Ciclo di vita completo in onCreate");
    }

    public void onStart(){
    	super.onStart();
    	Log.d(tag, "Ciclo di vita visible in onStart");
    }

    public void onStop(){
    	super.onStart();
    	Log.d(tag, "Ciclo di vita visible in onStop");
    }

    public void onPause(){
    	super.onStart();
    	Log.d(tag, "Ciclo di vita invisible in onPause");
    }

    public void onResume(){
    	super.onStart();
    	Log.d(tag, "Ciclo di vita invisible in onResume");
    }

    public void onDestroy(){
    	super.onStart();
    	Log.d(tag, "Ciclo di vita completo in onDestroy");
    }
}

Adesso andiamo ad aprire l’emulatore per provare l’applicazione. Se non l’avete già fatto dovete creare un nuovo emulatore. Aprite l’Android virtual device manager (passo 1 nell’immagine qui sotto), si aprirà una finestra con tutti i virtual device che avete creato. Cliccate su new (passo 2) per aprire il creatore di virtual device, quindi mettete un nome per il virtual device ed una versione di android (la stessa dell’applicazione che state creando), quindi create il virtual device (passo 3 e 4).

come creare un nuovo virtual device

come creare un nuovo virtual device

Adesso che avete creato il vostro virtual device andiamo sulla finestra package explorer (sulla sinistra, dove c’è l’albero dei file del progetto), cliccate con il tasto destro sul nome dell’applicazione e selezionate run as->android application.

Inizierà a caricarsi il virtual device che avete creato. Ci metterà più o meno tempo in caricare  a seconda della potenza del vostro computer, ma comunque mettetevi l’anima in pace perchè ci sono da aspettare minimo 5 minuti.

Finito di caricare dovreste avere sullo schermo la vostra applicazione helloWorld (se non ce l’avete fatela partire di nuovo senza chiudere l’emulatore). Adesso tornate su eclipse ed aprite il DDMS (window->open perspective->DDMS). Siete ora nell’ambiente per impartire direttive all’emulatore (esempio simulare una chiamata) e per vedere i messaggi del log.

L’applicazione che avete appena creato genera dei messaggi nel log quando entra nelle varie fasi del ciclo di vita.  Provate a premere il tasto back sull’emulatore e tornate sul DDMS. Nel log dovreste vedere qualcosa del tipo :

04-28 11:07:37.839: D/CicloDiVita(568): Ciclo di vita visible in onStop
04-28 11:07:37.839: D/CicloDiVita(568): Ciclo di vita completo in onDestroy

Premendo il tasto back l’activity è entrata rispettivamente nel metodo onStop() e onDestroy() che contengono le istruzioni per generare una nuova entrata nel log ( Log.d(tag, “Ciclo di vita visible in onStop”); ). Premendo il tasto home invece dovrebbe uscire qualcosa del tipo:

04-28 11:15:28.989: D/CicloDiVita(568): Ciclo di vita invisible in onPause
04-28 11:15:30.069: D/CicloDiVita(568): Ciclo di vita visible in onStop

Provate a vedere cosa succede se, aprendo una differente app, tornate alla vostra activity tenendo premuto il tasto home.

Ok, ma perchè dovrei conoscere il ciclo di vita di un’applicazione android?

Spero che alla fine di questa guida non vi sia venuta in mente questa domanda perchè altrimenti vorrebbe dire che non avete capito niente finora. Conoscere e comprendere il ciclo di vita di un’applicazione è fondamentale se volete assicurare un corretto funzionamento della vostra applicazione. Android è un sistema operativo multi tasking, l’utente, oltre ad usare la vostra app, userà altre 20 app contemporaneamente passando di una in una. Quindi è necessario implementare un sistema per salvare lo stato dell’applicazione ogni volta che viene messa in background e recuperarlo ogni volta che viene ripristinata l’activity.

Spero sinceramente che questa guida sia abbastanza chiara e che vi sia servita a qualcosa. Ovviamente sono aperto a domande su eventuali dubbi ed anche, come no, ad eventuali critiche.

Be Sociable, Share!



    About the Author

    Luka
    Luca Di Vincenzo, informatico, da molti anni blogger appassionato di ultime tecnologie. Attualmente risiede in Spagna, dove lavora come Senior Software Engineer da 5 anni. Sul blog si occupa della parte tecnica e dell'ottimizzazione SEO del sito.




     
    Potrebbero interessarti
     

     
    checkInconn

    Come controllare la connessione ad internet in android

    Se state sviluppando una nuova app per android al 99% avrete bisogno di controllare se la connessione ad internet è attiva o no. È uno dei classici problemi in cui incapperà priama o poi uno sviluppatore alle prime armi. In ...
    by Luka
    0

     
     
    webview_android

    Webview su android, guida dettagliata su come creare web app

    Da diverso tempo avevo promesso ad alcuni amici che avrei pubblicato una guida sulle webview per android quindi, scusandomi per il ritardo, eccomi quì. Prima di tutto fatemi fare a paio di premesse. Webview android, cos’...
    by Luka
    18

     
     
    adt

    Come installare Android SDK + Eclipse ADT, ecco la guida aggiornata

    Alcuni mesi fa avevamo pubblicato una guida su come installare Android SDK + Eclipse. Oggi,  anche se la guida è ancora valida, vogliamo aggiornare la procedura perchè Google ha pensato bene di venire incontro ai nuovi svilu...
    by Luka
    5