Sviluppo di applicazioni mobili - a.a. 2015/16

Avvisi

Logistica e testi

Logistica

Libri di testo

Materiale di approfondimento

Lucidi delle lezioni

  1. Prima lezione: lucidi.
    Introduzione al corso, logistica, modalità d'esame. Breve storia di Android, stato del mercato, l'ambiente di sviluppo, dettagli sull'installazione. (Vincenzo Gervasi)
  2. Seconda lezione: lucidi (prima parte).
    Architettura di un sistema Android: kernel, sandbox, framework. Linux, Dalvik, ART, e la sicurezza. Struttura di un'applicazione Android (in sviluppo, in deployment, in esecuzione). (Vincenzo Gervasi)
  3. Terza lezione: lucidi (seconda parte).
    l sistema delle risorse: architettura generale, risorse alternative, esempi. AndroidManifest.xml. Hello World! (Vincenzo Gervasi)
  4. Quarta lezione: lucidi (prima parte).
    Componenti di un'applicazione: activity, service, broadcast receiver, content provider. Comunicazione fra componenti attraverso Intent. Ancora su AndroidManifest.xml. Dettagli su Activity. (Vincenzo Gervasi)
  5. Quinta lezione: lucidi (seconda parte).
    Il ciclo di vita di un'Activity. Salvataggio e ripristino dello stato. Un esempio completo: BMI Calc (Vincenzo Gervasi)
  6. Sesta lezione: lucidi (prima parte).
    Definire la UI di un'Activity. Layout & View. Interazione (con richiami sui Listener). (Vincenzo Gervasi)
  7. Settima lezione: lucidi (seconda parte).
    Il sistema dei menu: options menu, menu contestuali, pop-up, contextual action bar, popolamento in base a Intent.
  8. Ottava lezione: lucidi.
    Ancora sulla UI. Scrivere proprie View; negoziazione del layout, repaint. La pipeline di rendering 2D e le classi Canvas e Paint. Un esempio completo. Scrivere propri layout manager. Esempio: EqLayout. Temi e stili. (Vincenzo Gervasi)
  9. Nona lezione: lucidi.
    Ancora sulla UI. ListView statiche e dinamiche. Data adapter e binding. Altri usi di adapter. RecyclerView: pattern e usi tipici. (Vincenzo Gervasi)
  10. Decima lezione: lucidi.
    Ancora sulla UI. La classe WebView: uso, configurazione, specializzazione; binding fra Java e Javascript. La classe Drawable e le sue sottoclassi (con dettagli su 9 patch). Notifiche all'utente: Toast e Notification. (Vincenzo Gervasi)
  11. Undicesima lezione: lucidi.
    Approfondimenti sulla retrocompatibilità: libcompat e il processo di build e deploy. Ancora sulla UI. Dialog, Fragment, DialogFragment. (Vincenzo Gervasi)
  12. Dodicesima lezione: lucidi.
    Tematiche di storage. Storage temporaneo: salvataggio temporaneo dello stato, Bundle e Parcelable. Storage permanente: preferenze, PreferenceScreen e PreferenceActivity; accesso al file system. (Vincenzo Gervasi)
  13. Tredicesima lezione: lucidi (prima parte).
    Accesso a database. Il DBMS SQLite e la classe SQLiteDatabase. Eseguire statement SQL. Query e la classe Cursor. Incapsulare l'accesso al database: la classe SQLOpenHelper e i pattern di progettazione relativi.
  14. Tredicesimabis lezione: lucidi (seconda parte).
    Condivisione di dati su Android. ContentProvider e ContentResolver. Accesso a ContentProvider di sistema; il meccanismo delle URI. Scrivere ed esportare propri ContentProvider. La gestione dei permessi. (Vincenzo Gervasi)
  15. Quattordicesima lezione: lucidi.
    Multithreading. Ripasso / anticipazione sul multithreading in Java: Thread e Runnable, controllo di thread, meccanismi di notifica (wait/notify) e serializzazione (synchronized). La classe AsyncTask. Altri approcci all'esecuzione asincrona: post() e runOnUiThread(). Struttura del dispatcher di Android: Handler, Looper, messaggi e code. (Vincenzo Gervasi)
  16. Quindicesima lezione: lucidi.
    Casi tipici di programmazione in background: uso di AsyncTask per il caricamento di immagini da web; i Loader e l'uso di cursori asincroni; uso del servizio DownloadManager e del ContentProvider associato; AsyncPlayer. Esempi. (Vincenzo Gervasi)
  17. Sedicesima lezione: lucidi.
    Segnalazioni broadcast; i Broadcast Receiver. Registrazione statica (in XML) e dinamica (a run-time) di un Receiver. Invio di messaggi broadcast. Le varianti con permessi, serializzazione, terminazione, raccolta risultati, persistenza. Gli allarmi. Il servizio AlarmManager e le varie tipologie di allarmi (con wake-up, ripetuti, imprecisi). ((Vincenzo Gervasi)
  18. Diciassettesima lezione: lucidi.
    Esecuzione in background: i Services. Ciclo di vita di un Service. Servizi bound (con approfondimenti su IntentService) e unbound. Esempio: il Random Music Player. (Vincenzo Gervasi)
  19. Diciottesima lezione: lucidi.
    Accesso ai sensori. Sensor discovery; i diversi tipi di sensori; ottenere le letture tramite callback. Pooling dei SensorEvent e cautele relative. Esempio: Sensors.java. (Vincenzo Gervasi)
  20. Diciannovesima lezione: lucidi.
    Tecnologie di rete. Networking TCP/IP in Java. Il ConnectivityManager. Bluetooth: introduzione, discovery, pairing, comunicazioni. Wi-Fi Direct: design del framework, discovery, connessione, trasferimento. Cenni su NFC.(Vincenzo Gervasi)
  21. Ventesima lezione: lucidi.
    Programmazione nativa.(Vincenzo Gervasi)

Materiale fuori programma

Esami e progetti

Modalità d'esame

Gli appelli d'esame si tengono presso lo studio del docente, stanza 305 del Dipartimento di Informatica. Gli studenti devono aver consegnato, prima della data fissata, la documentazione e il codice (sorgente ed eseguibile) del loro progetto, tramite una email a gervasi@di.unipi.it.

Lo studente dovrà presentarsi fornito di computer portatile su cui è installato l'ambiente di sviluppo utilizzato, con il progetto in forma sorgente. L'esame consisterà in una presentazione/dimostrativo dell'applicazione, a cura dello studente, e di un walkthrough del codice, accompaganto da domande di natura teorica.

Gli studenti che non disponessero di un computer portatile adatto, possono contattare il docente con sufficiente anticipo per organizzare modalità alternative (per esempio, lo svolgimento dell'esame presso un laboratorio didattico).

Date degli appelli

Le date si riferiscono alla data di consegna (per via elettronica) del progetto. Gli orali si svolgono tipicamente nei giorni immediatamente successivi, secondo un calendario che dipende dal numero di consegne.