Introduzione alla programmazione Android 1 Emanuel Di Nardo emanuel.dinardo@gmail.com
Architettura di base Insieme software composto da: Sistema operativo Middleware Applicazioni di base Utilizzo del linguaggio di programmazione Java con API dedicate 2
Suddivisione a strati del sistema: Applicazioni; Framework applicazioni; Librerie base; Livello esecutivo; Kernel; 3
Framework applicazioni: Strumenti per lo sviluppo; Accesso risorse hardware; Accesso senza restrizioni; Astrazione delle librerie; 4
Librerie base: Sviluppate in C/C++; Base dell App. Framework; 5
Livello esecutivo: Permette l esecuzione delle applicazioni; Fornisce la Virtual Machine; Implementa librerie di sistema; 6
Kernel: Basato su kernel linux 2.6+; Gestione della memoria; Sicurezza; Gestione processi; Connessioni; Driver di dispositivo; 7
Dalvik Virtual Machine VM alternativa alla JVM. Progettata per dispositivi con risorse limitate. Ogni applicazione ha la sua virtual machine. 8
La DVM è register-based, mentre la JVM è stack-based: Un registro ha una grandezza di 32 bit, mentre le coppie di registri adiacenti vengono considerate avere una grandezza di 64 bit; Se si referenziano degli oggetti allora un registro acquista una grandezza tale da riuscire a contenere lintero riferimento; Mediamente la richiesta per ogni metodo oscilla tra ~ 8-16 registri; 9
Processo di generazione del bytecode interpretato dalla DVM. Unico file.dex (Dalvik Executable) contenente i.class del Java compiler. 10
.dex file: Istruzioni da interpretare minori dei.class (natura register-based); Risorse condivise inserite una sola volta (stringhe, costanti, ecc...); File di dimensioni ridotte; David Ehringer The Dalvik Virtual Machine Architecture <http://davidehringer.com/software/android/the_dalvik_virtual_machine.pdf> 11
Struttura applicazioni Applicazioni divise in componenti: Activities; Services; Intent e Intent Filters; Content Providers; Broadcast Receivers; 12
All avvio di un applicazione android consulta il file AndroidManifest.xml. File estremamente importante: Contiene i permessi utilizzati dall applicazione; Versione API; Componenti hardware e software utilizzati; 13
AndroidManifest.xml supporta i seguenti tag per le componenti: <activity>; <service>; <provider>; <receiver>; Ogni tag ha un determinato tipo di attributi. Es: 14
Tutte le risorse (immagini, elementi UI) sono identificate da un ID univoco. Questo approccio ne semplifica l utilizzo in tutta l applicazione. Gli ID sono generati automaticamente nel file R.java Appaiono come valori esadecimali utilizzati dal sistema per le assegnazioni 15
R.java inoltre include riferimenti per ogni altro tipo di risorsa nel sistema. (Ad esempio le interfacce grafiche) NON DEVE ASSOLUTAMENTE ESSERE MODIFICATO! 16
Le applicazioni android sono in formato.apk che è un Android Package. Generato dopo la fase di compilazione. Contiene il file.dex, il manifest e tutte le risorse dell applicazione. Permette di firmare le applicazioni per l installazione sul dispositivo e per proteggere la stessa. 17
Activities Componente che permette l interazione con l utente ed è provvista di interfaccia utente. Un applicazione si compone di più activity. Coesistono e cooperano tra di loro scambiandosi informazioni. C è sempre un activity principale da presentare all apertura dell applicazione. Possono essere avviate da una componente di un applicazione esterna. Svolge un unico compito! 18
Quando creiamo un activity dobbiamo effettuare due operazioni fondamentali: Estendere la classe Activity; Inserire il suo riferimento statico nell AndroidManifest.xml; 19
Le activities rispettano un determinato ciclo di vita, da quando vengono mandate in esecuzione fino alla loro distruzione; E obbligatoria l implementazione del solo metodo oncreate(). E buona norma eseguire in questo metodo l inizializzazione dell Activity; 20
Back stack delle activity: Ogni nuova activity viene inserita in cima al back stack, mentre le precedenti attendono la sua esecuzione 21
E indispensabile invocare i metodi della superclasse tramite la super altrimenti si lancia un eccezzione! 22
Per terminare un activity abbiamo due possibilità: Invocare il metodo finish(); Invocare il metodo finishactivity() se vogliamo eseguire questa operazione da un altra activity; Non è obbligatorio invocare uno dei due metodi, android si occuperà di disfarsene quando non è più necessaria. 23
Services Esegue operazioni in background. Non è fornita di interfaccia utente. Sono di supporto alle activities (es. riproduzione musica, operazioni di I/O). Come per le activity possono essere avviati da componenti esterne all applicazione in cui sono fornite. 24
Possono essere avviati in due modalità: Started: tramite il metodo startservice(), gira in background per un tempo indefinito o finché la componente che lo ha avviato non ne richiede la fine o viene distrutta; Bound: tramite il metodo bindservice(), offre un interfaccia per la comunicazione client-server per poter interagire con esso. Attivo finché tutte le componenti sono associate con esso. Possiamo associare più di una componente per volta. 25
Girano nel main thread del processo se non diversamente richiesto. Prestare molta attenzione, può portare ad un errore del tipo Application Not Responding se esegue operazioni bloccanti o ad alto consumo di risorse. 26
Anche per i services bisogna eseguire le due operazioni descritte nelle activity: Estendere la classe Service: Inserire il riferimento al service nell AndroidManifest.xml: 27
Ci sono due cicli di vita per un service, in dipendenza dello stato in cui si trova. L unico metodo obbligatorio è onbind(), indipendentemente dallo stato in cui può trovarsi il service; E consigliato effettuare le inizializzazioni nel metodo oncreate(); *Android 1.6- utilizza onstart() al posto di onstartcommand() 28
Per fermare un service in modalità started possiamo usare: stopself(), invocabile dal service; stopservice(), invocabile dal componente che ha richiesto il service; Un service in stato bound si ferma solo quando tutte le componenti associate con esso si sono scollegate tramite il metodo unboundservice(). 29
Le richieste al sistema possono essere di due tipi: Implicite Esplicite
usato con i parametri dinamici (?); sortorder: indica l ordine in cui le righe ci verranno restituite;
Si definisce un file xml per ogni activity. Ogni elemento grafico ha la propria corrispondenza in tale file. Organizzazione in layout: FrameLayout: il più semplice, supporta un solo elemento per volta. LinearLayout: tutti gli elementi sono allineati in una sola direzione (vericale/ orizzontale)
Materiale disponibile ai seguenti indirizzi: http://goo.gl/kypzd http://students.uniparthenope.it