Verified Commit 1415155a authored by Davide Depau's avatar Davide Depau
Browse files

Add slides content

parent d3133000
## Prima di iniziare
Preparazione 2
Aggiungete al progetto le dipendenze da qua:
https://gitlab.poul.org/corsi/android/cardreader/blob/master/app/build.gradle
---
# Android Fundamentals
## Stavolta più in dettaglio
----
## Activity
- Activity è una singola schermata della GUI
- Le attività sono indipendenti tra di loro
- Non ne esistono due contemporaneamente
- O meglio, potrebbero. Ma non ci si può fare affidamento.
----
## Activity
- Sebbene si dichiari una o più attività come principale/i, non ne esiste una "iniziale"
- Qualsiasi attività esportata può teoricamente essere avviata per prima
----
## Activity
- Le attività possono lavorare per i fatti loro
- Oppure possono ricevere dati in ingresso/restituirne in uscita
----
## Activity
Le activity hanno un **ciclo di vita** ben noto e definito.
----
<!-- .slide: id="activity-lifecycle" -->
<style>
#activity-lifecycle img {
height: 100vh;
width: auto;
max-height: none;
max-width: none;
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
padding: 0;
margin: 0;
}
</style>
![Activity lifecycle](slides/img/activity_lifecycle.png)
----
## Activity - Lifecycle
### Cose importanti
- L'inizializzazione va fatta dentro `onCreate`
- Eventuali dati vanno salvati in `onPause`
- Se l'Activity non viene distrutta, vanno ripresi in `onResume`
----
## View
- L'interfaccia è composta dalle View
- Esistono numerose view, ad esempio per creare pulsanti e layout
---
## Risorse
La GUI è in genere strettamente legata alle **risorse**.
----
## Risorse
- Le risorse si trovano in una directory `res` accanto ai sorgenti
- Consentono di indicare valori al di fuori dal codice
----
### Alcuni tipi di risorse
- Layout - layout schermate
- Drawable - immagini scalari e vettoriali
- Mipmap - icone per varie densità display
- Values - valori generici
- XML - XML generici
----
### Alcuni tipo di risorse in values
- Colors - Definizione colori base
- Dimens - Dimensioni elementi
- Strings - Stringhe e traduzioni
- Styles - Temi
----
### Override risorse
Le risorse possono essere selezionate in base a dei qualificatori. Per esempio:
- Lingua
- Orizzontale/verticale
- Densità schermo
- Night mode
- Proporzioni schermo
----
### Risorse
Queste funzionalità ci consentono di far adattare la nostra interfaccia a svariati dispositivi,
senza toccare una riga di codice.
---
## Layout
- L'interfaccia viene composta da delle risorse XML chiamate "layout"
- Dentro i layout si definiscono le View e i loro posizionamenti relativi
----
## Layout
Possiamo definire più volte lo stesso layout con qualificatori diversi (es. portrait/landscape).
Il sistema sceglierà uno o l'altro in base al qualificatore.
----
## Layout
Possiamo assegnare degli identificativi per usare le view nel codice.
Questi vanno inseriti in tutte le definizioni; il codice non ha bisogno di sapere quale viene utilizzato.
---
## I servizi
I servizi ci consentono di eseguire azioni senza un'interfaccia grafica.
----
## I servizi
Abbiamo 3 tipi di servizi:
- Background service
- Foreground service
- Bound service
----
## Background service
- Sono totalmente invisibili all'utente
- Se ne abusava nei primi giorni di Android
----
## Background service
- Oggigiorno il sistema li vincola pesantemente per risparmiare batteria
- Nelle ultimissime versioni di Android vengono resi automaticamente "Foreground"
- Tuttavia, se un'Activity dell'app è aperta, non vengono generalmente uccisi
----
## Foreground service
- Sono come i background service, ma la prima cosa che fanno è mostrare una notifica
- Finché la notifica è presente, il servizio può eseguire
- Se la notifica è rimossa, è declassato a background service
----
## Bound service
- Sono speciali servizi che forniscono specifiche funzionalità per altre app o il sistema
- Se un'app "binds to" un servizio, il servizio ha la stessa priorità dell'app
----
## I servizi
Molti degli use-case dei servizi sono coperti, nelle versioni recenti di Android, da JobScheduler.
I Job dichiarano indicativamente cosa faranno, e vengono gestiti intelligentemente dal sistema in modo da creare il minor disagio.
---
## I broadcast
- I broadcast sono Intent che vengono inviati dal sistema o da un'app per segnalare un evento.
- Possono essere impliciti o espliciti:
- Espliciti: diretti a un'app specifica
- Impliciti: inviati a tutti
----
## I broadcast receiver
- Questi Intent possono essere ricevuti da dei BroadcastReceiver
- Il receiver dichiara a quali broadcast è interessato; il sistema glieli manda
----
## I broadcast receiver
- I broadcast receiver possono gestire eventi in background, ma per poco tempo
- Normalmente avviano un Job o mostrano una notifica
----
## I broadcast receiver
- Possono essere dichiarati nel manifest, oppure a runtime, con degli IntentFilter
- Le versioni recenti di Android non inoltrano la maggior parte dei broadcast impliciti di sistema ai receiver dichiarati nel manifest.
---
## I content provider
- I content provider forniscono *dati*
- Si comportano come un database, esposto alle altre app
- La riservatezza dei dati è controllata dal sistema
----
## I content provider
- Possono richiedere dei permessi per leggere/scrivere dati
- I contenuti sono forniti mediante URI (es. `contacts://...`)
- Un'app (che ha i permessi) può passare ad un'altra app in un Intent il permesso di agire su un URI specifico
---
## Attivazione dei componenti
Ogni componente ha il proprio set di metodi per essere attivato.
Tutti i componenti possono essere attivati esclusivamente da un `Context` (Activity e Service).
Ai BroadcastReceiver viene fornito un Context insieme ai broadcast: anche loro possono.
----
## Avvio attività
- `startActivity`
- `startActivityForResult` (se si aspetta un risultato)
----
## Avvio servizi
- `startForegroundService` (nuove versioni di Android, per dichiarare preventivamente che il service sarà in foreground)
- `startService`
- `bindService`
----
## Invio broadcast
- `sendBroadcast`
- `sendOrderedBroadcast` (ricevuto da un solo receiver alla volta)
- `sendStickyBroadcast` (deprecato)
----
## Attivazione content provider
- `getContentResolver`
---
## Il manifest
È un file XML dove vengono dichiarate tutte le informazioni di interesse pubblico.
----
## Nel manifest si dichiarano
- Permessi usati
- Funzionalità usate
- Dipendenze
- Versione minima e target dell'SDK di Android
- Librerie speciali di sistema (librerie Google)
----
## Nel manifest si dichiarano
- Tutte le attività
- Tutti i servizi
- Tutti i content provider
- Eventuali broadcast receiver
Eventuali componenti privati possono essere specificati come tali
---
# Fine della teoria
## Domande?
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment