Sviluppo di applicazioni mobili - a.a. 2019/20

Avvisi

Logistica e testi

Logistica

Libri di testo

Materiale di approfondimento

Lucidi delle lezioni

  1. 18 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. 20 Febbraio 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. 25 Febbraio lucidi (prima parte, seguito).
    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)
  4. 27 Febbraio lucidi (seconda parte).
    Il sistema delle risorse: architettura generale, risorse alternative, esempi. AndroidManifest.xml. Hello World! (Vincenzo Gervasi)
  5. 3 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)
  6. 10 Marzo lucidi (seconda parte).
    Il ciclo di vita di un'Activity. Salvataggio e ripristino dello stato. Un esempio completo: BMI Calc (Vincenzo Gervasi)
  7. 12 Marzo lucidi (prima parte).
    Definire la UI di un'Activity. Layout & View. Interazione (con richiami sui Listener). (Vincenzo Gervasi)
  8. 17 Marzo lucidi (seconda parte).
    Il sistema dei menu: options menu.
    Fuori programma d'esame: lucidi. Kotlin e Android: cenni sul linguaggio e implementazione su Android. (Vincenzo Gervasi)
  9. 19 Marzo lucidi (seconda parte).
    Il sistema dei menu: menu contestuali, pop-up, contextual action bar, popolamento in base a Intent. (Vincenzo Gervasi)
  10. 24 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. (Vincenzo Gervasi)
  11. 26 Marzo lucidi.
    Scrivere propri layout manager. Esempio: EqLayout. Temi e stili. Material Design. (Vincenzo Gervasi)
  12. 31 Marzo: lucidi.
    Ancora sulla UI. ListView statiche e dinamiche. Data adapter e binding. Altri usi di adapter. RecyclerView: pattern e usi tipici. (Vincenzo Gervasi)
  13. 2 Aprile: 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). (Vincenzo Gervasi)
  14. 7 Aprile: lucidi (seconda parte).
    Esempio: 9patch e AnimDrawable per un semplice videogame. Notifiche all'utente: Toast, Snackbar e Notification. (Vincenzo Gervasi)
  15. 9 Aprile: lucidi.
    Ancora sulla UI. Dialog, Fragment, DialogFragment. (Vincenzo Gervasi)
  16. 16 Aprile: 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)
  17. 21 Aprile: 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. Object-Relational Bridge con Jetpack ROOMS. (Vincenzo Gervasi)
  18. 23 Aprile: 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) Un esempio di ContentProvider con ROOM: Formaggi.zip (da importare su Android Studio).
  19. 28 Aprile: 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.
  20. 30 Aprile: 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)
  21. 5 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)
  22. 7 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)
  23. 12 Maggio: lucidi.
    Accesso ai sensori. Sensor discovery; i diversi tipi di sensori; ottenere le letture tramite callback. Pooling dei SensorEvent e cautele relative. (Vincenzo Gervasi)
  24. 14 Maggio: lucidi.
    Servizi di localizzazione. Geocoding e Reverse geocoding, Mappe e Marker. (Vincenzo Gervasi)
  25. 19 Maggio: lucidi.
    Architettura multimediale: audio, foto, video. (Vincenzo Gervasi)
  26. 21 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. 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 usualmente presso lo studio del docente, stanza 331 del Dipartimento di Informatica. Durante l'emergenza COVID, gli orali si terranno per via telematica, come sara` indicato sul sito Esami. 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: 10 Giugno 2020
  2. Secondo appello: 30 Giugno 2020
  3. Terzo appello: 21 Luglio 2020
  4. Quarto appello: 9 Settembre 2020
  5. Primo appello straordinario: 26 Ottobre 2020
  6. Quinto appello: 8 Gennaio 2021
  7. Sesto appello: 5 Febbraio 2021
  8. Secondo appello straordinario: 22 Marzo 2021