vuoi
o PayPal
tutte le volte che vuoi
Ciclo di vita di un'activity in Android
Quando un'activity va in esecuzione per interagire direttamente con l'utente vengono obbligatoriamente invocati tre metodi:
- onCreate: l'activity viene creata. Il programmatore deve assegnare le configurazioni di base e definire quale sarà il layout dell'interfaccia.
- onStart: l'activity diventa visibile. È il momento in cui si possono attivare funzionalità e servizi che devono offrire informazioni all'utente.
- onResume: l'activity diventa la destinataria di tutti gli input dell'utente.
Android pone a riposo un'activity nel momento in cui l'utente sposta la sua attenzione su un'altra attività del sistema, ad esempio apre un'app diversa. Anche questo percorso, passa per tre metodi di callback:
- onPause: (inverso di onResume) notifica la cessata interazione dell'utente con l'activity.
- onStop: (contraltare di onStart) segna la fine della visibilità dell'activity.
OnDestroy: (contrapposto ad onCreate) segna la distruzione dell'activity. Solitamente i metodi di callback sono concepiti a coppie (onCreate - onDestroy, onStart - onStop, onResume - onPause) e solitamente il lavoro fatto nel metodo di avvio - in termini di funzionalità e risorse allocate - viene annullato nel corrispondente metodo di arresto. Un ulteriore aspetto fondamentale della vita di un'activity consiste nel salvataggio della cosiddetta view hierarchy ovvero lo stato dei componenti visuali presenti nell'interfaccia utente. Questo è fatto automaticamente dal sistema, ma il programmatore può chiedere di salvare ulteriori dati inserendoli come elementi chiave/valore in un oggetto di classe Bundle.
Gestire risorse e asset
La cartella res conta diverse sottocartelle i cui nomi non sono casuali. Tra queste:
- layout: contiene l'architettura grafica dei componenti dell'interfaccia utente;
- values: contiene stringhe, colori, dimensioni e altre
- tipologie di valori che potranno essere usate in ulteriori risorse o nel codice Java;
- drawable: sono immagini nei formati più comuni;
- mipmap: immagini che costituiscono l'icona dell'applicazione, quella con cui viene lanciata dal sistema operativo.
Le risorse sono compilate in un formato binario ed indicizzate mediante un ID univoco. Questi ID sono conservati in una classe Java, di nome R, autogenerata ad ogni modifica.
Gli assets
Esiste anche una risorsa "grezza" collocabile nella cartella res/raw. Vi si potrà collocare tutto ciò che non si riesce ad inquadrare in una particolare tipologia. In alternativa alle risorse raw, si possono definire gli assets. Questi esulano dal meccanismo delle risorse e vanno depositati nell'omonima cartella di progetto che, se non presente, può essere creata.
Intent e messaggi
Gli intent rappresentano una forma di messaggistica gestita dal sistema operativo con cui una componente può richiedere
L'esecuzione di un'azione da parte di un'altra componente. Sono uno strumento duttile, ma gli utilizzi ricadono in queste tre casistiche:
- Avviare activity;
- Avviare un service;
- Inviare un messaggio in broadcast che può essere ricevuto da ogni applicazione.
Gli intent possono essere:
- Espliciti: viene dichiarato quale componente dovrà essere attivata. Utili nell'apertura di un'activity;
- Impliciti: non specificano una componente da attivare ma quale azione deve essere svolta. La loro invocazione si estrinseca spesso nell'apertura di una finestra di dialogo che chiede all'utente quale app vuole si apra per completare l'azione.
Gli extras
Gli intent hanno a disposizione una specie di bagagliaio in cui custodiscono dati che possono essere letti dal destinatario. Questi valori vengono generalmente chiamati Extras e possono essere di varie tipologie. La loro gestione negli Intent funziona in maniera simile ad una struttura a mappa: con
dei metodiput
viene inserito un valore etichettato con una chiave e con i corrispondenti metodi get
viene prelevato il valore.
Le permission
Un'app Android vive in un ambiente chiuso (sandbox) isolato dal resto del sistema. Talvolta può essere necessario che essa debba uscire da questa "gabbia" per accedere a informazioni, funzionalità o apparati hardware del dispositivo. Per far sì che l'app acceda a tali servizi, essa deve possedere alcuni "permessi" speciali (permission) che devono essere dichiarati espressamente nel file AndroidManifest.xml.
Ogni permission viene dichiarata attraverso il tag <uses-permission>
da collocare fuori dal nodo <applicazione>
.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="....">
<uses-permission android:name="android.permission.INTERNET" />
<application>
......
</application>
...
</manifest>
Il sistema quindisaprà quali attività particolare l'app dovrà svolgere, e potrà concedere il permesso di effettuarle.
Le permission Android vengono suddivise in tre famiglie in base al livello di protezione:
- permission normal: non mettono a rischio la privacy dell'utente. Ad esempio: accesso alla rete, accesso a tecnologie per la connettività, info sulla rete WI-FI.
- permission dangerous: potenzialmente più lesive circa la riservatezza degli utenti. Ad esempio: localizzazione, calendario, contatti, accesso ai file e così via.
- permission signature: gestite a livello di installazione ma utilizzabili solo se l'app che lo richiede è firmata con lo stesso certificato di quella che ha definito la permission.
Le permission dangerous vanno accettate a run-time dall'utente al momento dell'utilizzo della funzionalità che le richiedono mentre per quelle normali è sufficiente dichiararne l'impiego al momento.dell'installazione dell'app. Il layout di un'app Android La struttura grafica di un activity prende il nome di Layout. Esistono tre modi modi per creare interfacce utente in Android: procedurale, dichiarativo, visuale. Nel primo caso si intende l'implementazione dell'interfaccia grafica del codice. La creazione dichiarativa non richiede la scrittura di codice. Android permette la creazioni di interfacce sia procedurali (attraverso codice Java) oppure possiamo creare le interfacce attraverso un descrittore XML (metodo dichiarativo). Inoltre, permette anche un altro approccio ibrido, in cui si crea un'interfaccia in modo dichiarativo e la si controlla e specifica in modo procedurale. Il metodo più indicato è quello dichiarativo, in quanto risulta più leggibile, più strutturato e meno soggetto ad aggiornamenti di versione rispetto al codice Java puro. L'ultimo approccio è quello visuale, totalmente affidato allapotenza degli ambienti disviluppo.Sono stati definiti diversi tipi di layout, ma ce ne sono alcuni di utilizzo molto comune:
- LinearLayout: contiene un insieme di elementi che distribuisce in maniera sequenziale dall'alto verso il basso o da sinistra a destra. E' un layout molto semplice e piuttosto naturale.
- TableLayout: altro layout piuttosto semplice, inquadra gli elementi in una tabella e quindi è particolarmente adatto a mostrare strutture regolari suddivise in righe e colonne come form o griglie.
- RelativeLayout: il più flessibile e moderno. Adatto a disporre in maniera meno strutturata gli elementi.
- ConstraintLayout: nato appositamente per la creazione di interfacce responsive.
Definire layout in XML, markup di base
Un elemento comune non solo ai layout ma anche a tutti gli altri elementi in essi contenuti, la presenza obbligatoria di due attributi: layout_width
e layout_height
che definiscono larghezza e altezza dell'elemento. Il suo valore sarà
un valore espresso in sp o unacostante:- wrap_content: elemento sarà alto e largo a sufficienza per includere il suo contenuto.- match_parent: elemento si estenderà in altezza o in larghezza fino a toccare il suo contenitore.
Vediamo ora un esempio di LinearLayout che con l'attributo orientation riceve la sua connotazione principale. Con esso si dichiara i che senso verranno disposti gli elementi.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> ... </LinearLayout>
TableLayout viene specificato mediante due tag: TableLayout e TableRow.
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent"> <TableRow android:layout_width="wrap_content" android:layout_height="match_parent"> ... </TableLayout>
</TableRow> |
</TableLayout> |
TableLayout rappresenta la tabella nel suo complesso mentre ogni nodo TableRow contiene tutti gli elementi di una riga.
Riportiamo un esempio di RelativeLayout con una TextView collocata in alto a sinistra ed un button in basso al centro.
ConstrainLayout
È il più moderno tra quelli che Android mette a disposizione e si ispira alla flessibilità del RelativeLayout ma con la mission di rendere l'interfaccia utente più responsive possibile, evitando al massimo l'annidamento di layout. ```html- Risolvere un problema di matematica
- Riassumere un testo
- Tradurre una frase
- E molto altro ancora...
Per termini, condizioni e privacy, visita la relativa pagina.