08 giugno 2009

Anatomia di un applicazione Android

Ci sono 4 blocchi fondamentali in un applicazione Android:

* Activity
* Intent Receiver
* Service
* Content Provider

Naturalmente la maggiorparte delle applicazioni non sviluppano tutti e 4 i blocchi, ma con una qualsiasi combinazione degli stessi.

Dopo aver deciso quali componenti sono necessari per la tua applicazione, è necessario elencarli in un file chiamato AndroidManifest.xml.

E' un file XML dove vengono dichiarate le componenti di un' applicazione e quali sono i relativi requisiti e capacità. Per poterne sapere di più è possibile guardare la documentazione relativa al file di manifest di Android.

Vediamo i 4 macro blocchi in dettaglio...


Activity
Le Activities sono le componenti più comuni presenti tra i 4 blocchi.
Un attività è di solito una schermata di un' applicazione.
Ogni attività è implementata in una singola classe che estende la classe base Activity.
La tua classe visualizzerà una User Interface composta da Views e risponderà a degli eventi.
La maggiorparte delle applicazioni sono composte da molteplici schermate.
Ad esempio un applicazione per l'invio di messaggi avrà una schermata in cui si avrà a disposizione l'elenco dei contatti a cui poter inviare il messaggio, una seconda scermata in cui si eseguirà la scrittura vera e propria del messaggio e schermate in cui modificare i setting o consultare la lista di messaggi in ingresso.

Ciascuna di queste schermate sarà implementata come un attività.
Muoversi su un altra schermata consisterà allo START di una nuova attività.
In alcuni casi un attività può restituire un valore all' attività precedente.

Quando viene aperta una nuova schermata, quella precedente viene messa in pausa ed inserita all'interno di un history stack.

L'utente potrà navigare indietro mediante questa history. Si può inoltra forzare l'eliminazione di una attitivà dall' history stack nel caso in cui non si ritenesse appropriata la relativa permanenza.
Android mantiene uno stack per ogni applicazione lanciata dalla schermata HOME.

Intent and Intent Filters
Android usa una classe speciale chiamata Intent per muoversi da una schermata all'altra.
Un intent descrive cosa vuole fare un applicazione. Le due parti più importanti della struttura dati di un intent sono le azioni e i dati su cui si basano.
Tipicalmente valori per le azioni sono MAIN (la pagina principale delle attività), VIEW, PICK, EDIT, etc.
I dati sono espressi come URI.
Per esempio, per visualizzare le informazioni di un contatto, si dovrà creare un intent con l'azione VIEW e i dati settati all'interno dell' URI che rappresentano la persona.

C'è una classe connessa chiamata IntentFilter.
Mentre un intent è effettivamente una richiesta di eseguire qualcosa, un intent filter è una descrizione di quali intents un attività è capace di gestire.
Un attività che è capace di visualizzare le informazioni di un contatto pubblicherà un IntentFilter che dice che essa conosce il modo di gestire l'azione VIEW che verrà applicata ai dati per rappresentare la persona. Le attività pubblicano i propri IntentFilters nel file AndroidManifest.xml.
Navigare da schermata a schermata è compiuto risolvendo gli intents.
Per navigare in avanti, un attività chiama il metodo startActivity(myIntent).
Il sistema cerca l'intent filter tra tutte le applicazioni installate e prende quello che ha il miglior match con myIntent.
La nuova activity verrà informata dell'intent, che causerà la propria esecuzione.
Il processo di risoluzione degli intent viene eseguito a run time quando la startActivity viene chiamata e questo offre 2 benefici:
* Le attività possono riusare funzionalità da altre componenti semplicemente eseguendo una richiesta mediante una Intent.
* Le attività possono essere rimpiazzare in ogni istante da un Activity con lo stesso IntentFilter.

Intent Receiver
Puoi usare un IntentReceiver quando desideri eseguire qualcosa nella tua applicazione in relazione ad un evento esterno. Per esempio, quando il telefono suona, oppure quando una rete è disponibile, oppure quando è mezzanotte. Gli intent receivers non visualizzano una UI, sebbene esse possano usare il NotificationManager per alertare l'utente che qualcosa di interessante stà succedendo.

Gli Intent receivers sono registrati sempre nel file AndroidManifest.xml, ma si possono registrare tramite il codice mediante l'uso dell'istruzione:
Context.registerReceiver();

La tua applicazione non deve essere in esecuzione per ricevere delle chiamate agli intent receivers.
Il sistema eseguirà la tua applicazione, se necessario, quando l'event receiver viene triggerato.

Le applicazioni possono anche inviare il proprio intent in broadcast alle altre applicazioni mediante l'istruzione:
 Context.broadcastIntent();


Service

Un Service è un codice che è in esecuzione come long-lived e viene eseguito senza una UI.
Un buon esempio è il media player che riproduce delle canzoni da una play list.
Mediante una schermata l'utente potrà scegliere i brani da inserire o eliminare dalla playlist. Ma l'utente vorrà anche uscire da questa gestione, in questo caso l'attività del player potrà eseguire un nuovo servizio usando l'istruzione :
Context.startService();

In questo modo il servizio sarà eseguito in background per poter continuare l'esecuzione della musica.
Il sistema quindi continuerà ad eseguire il servizio finchè esso avrà necessità di essere eseguito.
Nota che è possibile connettersi ad un servizio (e farlo partire se esso non è ancora in esecuzione) mediante il comando:
Context.bindService();

Quando si è connessi con un service, puoi comunicare con esso mediante una serie di interfaccie esposte dal servizio.

Content Provider

Le applicazioni possono immagazzinare i dati in files, in un database SQLite, o mediante qualsiasi altro meccanismo abbia senso utilizzare.
Un content provider, comunque, è utile nel caso si voglia che i dati della propria applicazione siano condivisi con altre applicazioni. Un content provider è una classe che implementa un set standard di metodi per permettere alle altre applicazioni di salvare o utilizzare i tipi di dati che sono gestiti dal content provider.

Spero che questo post sia stato utile...buon divertimento :|

Nessun commento: