Sviluppo di applicazioni mobili - a.a. 2018/19

Avvisi

Logistica e testi

Logistica

Libri di testo

Materiale di approfondimento

Lucidi delle lezioni

  1. 28 Febbraio 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. 1 Marzo 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. 7 Marzo lucidi (seconda parte).
    l sistema delle risorse: architettura generale, risorse alternative, esempi. AndroidManifest.xml. Hello World! (Vincenzo Gervasi)
  4. 8 Marzo 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. 14 Marzo lucidi (seconda parte).
    Il ciclo di vita di un'Activity. Salvataggio e ripristino dello stato. Un esempio completo: BMI Calc (Vincenzo Gervasi)
  6. 15 Marzo lucidi (prima parte).
    Definire la UI di un'Activity. Layout & View. Interazione (con richiami sui Listener). (Vincenzo Gervasi)
  7. 21 Marzo lucidi (seconda parte).
    Il sistema dei menu: options menu, menu contestuali, pop-up, contextual action bar, popolamento in base a Intent.
  8. 22 Marzo 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. Material Design. (Vincenzo Gervasi)
  9. 28 Marzo: lucidi.
    Ancora sulla UI. ListView statiche e dinamiche. Data adapter e binding. Altri usi di adapter. RecyclerView: pattern e usi tipici. (Vincenzo Gervasi)
  10. 29 Marzo: lucidi (prima parte).
    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. 11 Aprile: lucidi (seconda parte).
    Notifiche all'utente: Toast, Snackbar e Notification. (Vincenzo Gervasi)
  12. 12 Aprile: lucidi.
    Ancora sulla UI. Dialog, Fragment, DialogFragment. (Vincenzo Gervasi)
  13. 2 Maggio: 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)
  14. 3 Maggio: lucidi.
    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. Object-Relational Bridge con Jetpack ROOMS. 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. 9 Maggio: lucidi.
    Multithreading. Ripasso 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.
    Fuori programma d'esame: lucidi. Kotlin e Android: cenni sul linguaggio e implementazione su Android. (Vincenzo Gervasi)
  16. 10 Maggio: 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 (codice). Esempi. (Vincenzo Gervasi)
  17. 14 Maggio: lucidi.
    Programmazione single-thread, concorrente, asincrona, in background. 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). Modo Doze e cautele relative. Esecuzione asincrona deferred: WorkManager. (Vincenzo Gervasi)
  18. 16 Maggio: lucidi.
    Esecuzione in background: i Services. Ciclo di vita di un Service. Servizi started (con approfondimenti su IntentService) e bound. Esempio: il Random Music Player. (Vincenzo Gervasi)
  19. 17 Maggio: lucidi, altri lucidi (prima parte).
    Accesso ai sensori. Sensor discovery; i diversi tipi di sensori; ottenere le letture tramite callback. Pooling dei SensorEvent e cautele relative. Servizi di localizzazione. (Vincenzo Gervasi)
  20. 23 Maggio: lucidi (seconda parte). Geocoding e Reverse geocoding, Mappe e Marker.
    Altri lucidi. Architettura multimediale: audio, foto, video. (Vincenzo Gervasi)
  21. 24 Maggio: 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)
  22. 30 Maggio: lucidi.
    Programmazione nativa. Google APIs: esempi, uso via REST, uso via Google Play Services. (Vincenzo Gervasi)

Esami e progetti

Modalità d'esame

Gli appelli d'esame si tengono presso lo studio del docente, stanza 331 del Dipartimento di Informatica. Gli studenti devono aver consegnato, prima della data fissata per ogni appello, 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, accompagnato 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, su appuntamento, secondo un calendario che dipende dal numero di consegne. Le date degli appelli vengono normalmente fissate con 60 giorni di anticipo.
  1. Primo appello: 20 Giugno 2019
  2. Secondo appello: 8 Luglio 2019
  3. Terzo appello: 26 Luglio 2019
  4. Quarto appello: 6 Settembre 2019
  5. Quinto appello: da fissare (Gennaio 2020)
  6. Sesto appello: da fissare (Febbraio 2020)
È possibile consultare il Calendario degli orali.