Adesso è il momento di comprendere alcuni concetti di alto livello che stanno alla base dello sviluppo di applicazioni Android e per farlo, come spesso accade, è meglio procedere con un esempio pratico. Quindi avviamo Android Studio e, seguendo quello che abbiamo fatto nelle prime lezioni di questa guida, creiamo un nuovo progetto denominato MyHelloWorld.
Osservando la finestra Project possiamo notare la presenza di numerosi file e cartelle che costituiscono il nostro progetto
Andiamo brevemente ad illustrare il contenuto di alcune importanti cartelle e la funzione di alcuni file:
java – Contiene i file con estensione java che caratterizzano la nostra applicazione. Nel nostro esempio è presente un file denominato MainActivity.java (in fase di creazione del progetto ho denominato in questo modo l’activity principale). Si tratta del file sorgente che permette di gestire l’activity e all’interno del quale possiamo scrivere il codice che regola il comportamento della nostra applicazione.
res – Contiene tutte le risorse utilizzate dall’applicazione ed i file relativi alle interfacce grafiche. Inoltre in essa sono presenti altre sottocartelle importanti, come layout e values. Nella sottocartella layout è presente il file activity_main.xml che definisce l’interfaccia utente della nostra activity.
All’interno di tale file inizialmente è presente solo il seguente codice e ogni modifica successiva all’interfaccia utente verrà riportata in esso
AndroidManifest.xml – Si tratta del file manifest dell’applicazione. In esso è possibile specificare i permessi relativi alla stessa ed altri importanti aspetti. Questo è il contenuto iniziale del file
Come appare evidente, il file manifest contiene informazioni dettagliate riguardo l’applicazione: definisce il nome del package, l’immagine che rappresenta l’applicazione sul dispositivo (icon), il nome dell’applicazione (label), il nome delle activity presenti nell’applicazione (nel nostro caso solo una, MainActivity).
All’interno della definizione dell’activity MainActivity possiamo vedere un elemento denominato intent-filter che serve ad indicare che questa activity è il punto di partenza dell’applicazione (action) e che essa può essere avviata attraverso il launcher del dispositivo su cui è in uso (category).
Infine osserviamo il codice che connette la nostra activity all’interfaccia utente. Questo avviene tramite il metodo setContentView del file MainActivity.java
In esso l’istruzione R.layout.activity_main si riferisce al file activity_main posizionato nella cartella res/layout. Il metodo onCreate è uno dei metodi che vengono chiamati quando viene avviata un’activity.
Abbiamo fatto una veloce panoramica degli elementi fondamentali che costituiscono un’applicazione Android e successivamente approfondiremo meglio la conoscenza di ciascuno di essi.
Tuttavia vorrei soffermarmi subito sul concetto di activity. Coloro che hanno familiarità con la programmazione ad oggetti avranno avuto esperienza con il concetto di incapsulamento di elementi e funzionalità in classi che vengono poi istanziate come oggetti per creare applicazioni. Dal momento che le applicazioni Android sono scritte in Java esse sono fondate su questo principio che consente un alto livello di riusabilità.
Infatti le applicazioni Android vengono create mettendo insieme una o più componenti chiamate appunto activity. Un’ activity è un singolo modulo relativo ad una funzionalità di un’applicazione e spesso è correlata direttamente ad una singola interfaccia utente. Ad esempio un’applicazione sveglia potrebbe avere un’activity che consente in una pagina di visualizzare l’elenco delle sveglie impostate ed una seconda activity tramite cui impostare una nuova sveglia in un’altra pagina.
Le activity vanno intese come blocchi funzionali riusabili che possono essere utilizzati in diverse applicazioni, perché sono indipendenti l’una dall’altra.
Un altro concetto fondamentale per lo sviluppo di applicazioni Android è quello di intent. Gli intent sono essenzialmente meccanismi tramite cui un’activity può lanciarne un’altra e quindi consentono di stabilire il flusso che lega le varie activity che costituiscono un’applicazione.
Approfondiremo nelle prossime lezioni sia il concetto di activity che quello di intent.