Tutorial I Componenti di un applicazione Android

0
2384

Dopo aver visto tutto ciò che serve per iniziare con lo sviluppo di un applicazione, oggi inizieremo a vedere i componenti che formano la base dell’architettura di un applicazione Android che sono:

• Activity
• Intent e Intent Filter
• Broadcast Intent Receiver
• Content Provider
• Services

Questi componenti li abbiamo gia visti in un articolo precedente.

Activity

La classe ( package android.app ) Activity è uno degli elementi centrali di ogni applicazione Android perchè si occupa della  gestione dell’interfaccia.
La responsabilità di questi componenti è di descrivere le diverse schermate di una applicazione e, attraverso la composizione delle View, gestisce le azioni dell’utente.
Possiamo subito comprendere come si tratti di una delle classi fondamentali dell’architettura Android.
Un Activity la possiamo vedere come una schermata o meglio un contenitore di componenti grafici che potranno occupare tutto il display, parte di esso o essere nascosti completamente.
Una normale applicazione è composta ovviamente da più schermate (possono essere schermate che visualizzano dello informazioni o che interagiscono con l’utente), le schermate che si alternano molte volte si scambiano delle informazioni.

Per questo motivo android organizza le attività secondo una struttura a stack dove l’attività in cima è sempre quella attiva in un particolare momento.
La visualizzazione di una nuova schermata, che come vedremo corrisponderà all’avvio di una nuova Activity, la porterà in cima allo stack mettendo in uno stato di pausa quelle precedenti.
Quando una Activity termina il proprio lavoro farà in modo di ritornare le eventuali informazioni raccolte alla precedente, la quale diventerà nuovamente quella attiva.
In una logica di ottimizzazione delle risorse, è necessario prevedere che una Activity non visualizzata (quindi non in cima allo stack) possa essere eliminata dal sistema per poi essere eventualmente
ripristinata successivamente.
http://i.stack.imgur.com/YDSSQ.png
Il programmatore attraverso alcuni callback ( onCreate() gia visto in un articolo precedente è il più importante viene invocato a ogni creazione (o ripristino completo) dell’Activity che lo descrive ) deve gestire il passaggio di stati.

Intent e Intent Filter

Tra le cose più importanti è quella di riutilizzare le Activity per eseguire le operazioni comuni di più applicativi come ad esempio la rubrica telefonica, inviare un messaggio.
Android ha deciso di gestire il tutto attraverso la definizione degli intent che vedremo essere descritti da istanze della omonima classe del package android.content.
In sintesi, quando un’applicazione ha la necessità di eseguire una particolare operazione non farà altro che creare un Intent richiedendo l’utilizzo di una qualche risorsa, o componente,in grado di poterlo esaudire.
Un Intent dovrà quindi essere caratterizzato da informazioni relative all’operazione da eseguire e da un meccanismo per l’identificazione del tipo di dati su cui la stessa opererà.
L’azione viene rappresentata da un oggetto di tipo String ma soprattutto come l’insieme dei dati venga rappresentato attraverso un URI.
Ecco un esempio per comprendere meglio l’intent Se vogliamo richiedere un numero di telefono prelevato dalla rubrica. Per eseguire questa operazione, l’Activity corrente non farà altro che creare un Intent del tipo:

String uri = “content://contacts/123″; (Servizio REST abbiamo chiesto un contatto con ID 123)
Intent intent = new Intent(Intent.ACTION_GET_CONTENT,uri);

che potrà poi essere utilizzato per l’avvio di un’altra attività in grado di gestirlo.
A completamento di questo, serve anche un meccanismo che permetta a un’applicazione, o meglio ai relativi componenti, di dichiarare l’insieme degli intent che gli stessi sono in grado di gestire. Questo viene realizzato attraverso gli intent filter.

BroadCast Intent Receiver

In Android la gestione di eventi esterni ( dell’arrivo di una telefonata, di un messaggio ) può essere realizzata attraverso la definizione di BroadcastReceiver ( package android.content ),  i quali permettono l’implementazione di specifici handler degli eventi cui le stesse si sono registrate.

http://www.tremendousx.com/Content/Images/courses/android_BroadcastReceiver.png

La registrazione a un particolare evento può avvenire attraverso il file di configurazione (l’AndroidManifest.xml) o in modo programmatico attraverso le apposite API.

Un’ultima nota riguarda il fatto che l’arrivo di un evento esterno, quindi l’attivazione di un intent receiver, non implica necessariamente l’esecuzione di una Activity e nemmeno la notifica dello stesso all’utente, ma in alcuni casi è inevitabile esempio l’arrivo di una telefonata.

 

Service

I Service  package android.app. Un esempio di servizio è quello relativo alla lettura di informazioni da un modulo GPS che invia dati NMEA a un’applicazione. Esso non necessita di una UI ma ha come compito quello di restare in esecuzione in background e di comunicare con le applicazioni che intendano farlo.

Una Activity, o altro componente, potrà eventualmente connettersi a un particolare servizio e, se ne ha i diritti, avviarlo o fermarlo.

Un’attività che intende utilizzare le funzionalità del servizio potrà eseguire quello che si chiama bind e accedere alla interfaccia (nel senso API).

Nel caso del modulo GPS potrebbero essere, per esempio, le operazioni di getLocation() o getLatitude().

 Content Provider

Una qualunque applicazione, non solo Android, deve avere una gestione dei dati. Alcune informazioni sono private e caratteristiche di un’applicazione mentre altre sono condivise tra più componenti.

Android permette di gestire i dati attraverso diversi strumenti, che possono essere l’utilizzo di file, di strumenti di
configurazione, alla gestione di un database SQLite.

http://www.edureka.in/blog/wp-content/uploads/2012/12/Accessing-the-Content-Provider.png

Nel caso in cui invece la condivisione di dati fosse un requisito, Android mette a disposizione il concetto di Content Provider  package android.content si tratta di un repository di informazioni a cui è possibile accedere da diversi componenti attraverso una modalità standard.

Per comprendere l’importanza di questo componente diciamo solamente come i contatti, gli sms e lo stesso insieme di applicazioni siano informazioni esposte attraverso specifici Content Provider.