Android - Introduzione
Android è il principale sistema operativo per il mobile al mondo. Gli è stata attribuita la più veloce diffusione mai vista per un sistema operativo mobile. La gran parte del merito della sua larga diffusione è stata affidata alle sue radici open source. Difatti Android è figlio di Linux. Questo sistema operativo è largamente impiegato in una moltitudine di dispositivi e ciò ne ha permesso una diffusione molto diversificata trasversalmente alle diverse categorie sociali.
SDK e ambiente di sviluppo - Android Studio
Per iniziare a sviluppare app Android è necessario dotarsi degli strumenti adeguati. Il cuore di questo tipo di programmazione risiede in un ambiente noto come Android SDK. Tutte le funzionalità dell’SDK possono essere usate, senza difficoltà, attraverso un ambiente intuitivo e multipiattaforma noto come Android Studio.
La prima generazione di sviluppatori Android si è formata su Eclipse ma il nuovo ambiente (Android Studio) risulta molto più versatile e flessibile. È un IDE molto intuitivo ed efficiente. All’inizio di ogni nuovo progetto, l’IDE propone diversi template che rappresentano i tipi più in voga di applicazioni e la sua configurazione è affidata ai file build di Gradle.
Gradle è uno strumento di build automation (atto di scrivere o automatizzare un'ampia varietà di compiti che gli sviluppatori software fanno nelle loro attività quotidiane) che permette una configurazione molto flessibile con una sintassi mutuata dal linguaggio Groovy. Gradle offre la gestione delle dipendenze in stile Maven.
Sviluppo nativo e cross-platform
Il tipo di approccio alla programmazione proposto da Android Studio è detto nativo in quanto è dipendente dal sistema operativo specifico. Le app sviluppate in questo modo non sono distribuibili su sistemi Apple o alternativi. Le alternative a questo tipo di approccio sono le tecnologie cross-platform con cui si possono realizzare applicazioni per diversi sistemi operativi partendo da un’unica base di codice. Ad esempio, Flutter è una piattaforma che risponde bene a tale esigenza.
Ci si domanderà quale sia l’approccio migliore per sviluppare app. Entrambi gli approcci hanno i propri pro e contro, come ogni cosa. Il nativo offre la possibilità di una gestione totale del dispositivo senza la paura di trovare limiti ma richiede spesso una programmazione molto professionale. Il non-nativo offre vantaggi rari relativi alla necessità di sviluppare applicazioni cross-platform (distribuiti su SO diversi).
Elementi e funzionamento di base di un’app
Ogni app Android affida le sue funzionalità a 4 tipi di componenti:
- Activity
- Service
- Content Provider
- BroadcastReceiver
Queste componenti esistono affinché l’app possa integrarsi alla perfezione nell'ecosistema Android.
I principi alla base delle scelte progettuali di Android
- Salvaguardia delle risorse: Android è particolarmente bravo nel distruggere e creare parti dell’app in maniera del tutto impercettibile all’utente. Ricordiamo che Android si propone lo scopo di animare qualunque dispositivo in cui riesca a vivere.
- Sicurezza: Ogni applicazione è un utente a se stante e vive in un proprio processo in cui viene allocata una nuova istanza della virtual machine, ciò per evitare che il crash di un’applicazione propaghi instabilità alle altre app in esecuzione. È assolutamente sconsigliata qualsiasi pratica che porti un’app ad invadere lo spazio riservato ad un’altra. In questo discorso si innesta la tematica di permission che qualsiasi utente Android conosce come l’insieme delle facoltà di azione che vengono concesse ad una nuova app installata.
Le fondamenta di Android
- Activity: è una interfaccia utente. Costituiscono il flusso in cui l’utente si inoltra per sfruttare le funzionalità messe a disposizione.
- Service: rappresenta un lavoro - generalmente lungo e continuato - che viene svolto interamente in background senza bisogno di interazione diretta con l’utente. I service sono di due tipologie: started e bounded. Un service è started quando un’app ha bisogno di svolgere attività in background, mirate ad uno scopo specifico, fino al loro completamento. Un service è bounded quando viene attivato solo nel caso in cui un’altra app abbia bisogno di connettersi con loro, permettendo l’interazione tra processi differenti.
- Content provider: nascono con lo scopo della condivisione di dati tra applicazioni. Questi componenti permettono di condividere, nell’ambito del sistema, contenuti custoditi su un database, su file o reperibili mediante accessi alla rete.
- Broadcast receiver: sono componenti che interagiscono ad un invio di messaggi a livello di sistema (ad esempio l’arrivo di un SMS). Sono utili per la gestione istantanea di determinate circostanze speciali e non utilizzano interfaccia grafica.
- Intent: ricordiamo che una componente può attivarne altre mediante apposite invocazioni di sistema. Questa intenzione viene codificata con un Intent utilizzabile come normale classe Java.
Il ciclo di vita di un’app Android
Android sa che il fattore fondamentale della sopravvivenza di un sistema mobile è la corretta gestione delle risorse. Android farà in modo di tenere in vita ogni processo il più a lungo possibile ma ciò non toglie che in alcune circostanze il SO si troverà nella necessità di liberare memoria abbattendo i processi. L’obiettivo fondamentale è quello di preservare il sistema e salvaguardare l’utente.
I processi possono essere classificati in ordine di importanza decrescente, come:
- Processi in “foreground”: sono quelli che interagiscono direttamente o indirettamente con l’utente. Ad esempio le applicazioni che contengono l’Activity attualmente utilizzata o i Service ad essa collegati.
- Processi visibili: non importanti come quelli in foreground ma anche essi vengono tutelati da Android. Si tratta di Activity visibili e Service ad esse collegati.
- Processi “service”: contengono dei service in esecuzione che generalmente svolgono lavori molto utili all’utente anche se non direttamente collegati con ciò che egli vede nel display.
- Processi “cached”: rappresentano i processi che non servono più a nulla. Tra questi vengono selezionati quelli da abbattere e finché il sistema operativo non affronta una fase di difficoltà non ha bisogno di eliminare processi in altre categorie se non questa.
Sviluppare, finalmente, con Android Studio
Dopo aver creato un progetto troveremo tre parti principali:
- La cartella con il codice Java
- La cartella res (contenente per lo più risorse realizzate in XML)
- Un file di configurazione denominato “AndroidManifest.xml”
Il progetto è contenuto in una cartella denominata app. Questo è il modulo di default. L’IDE, infatti, suddivide un progetto in più moduli, ognuno dei quali può svolgere un ruolo diverso. Dopo il modulo troviamo la sezione Gradle Scripts. Qui ci sono i file di build che userà Gradle per trasformare il nostro progetto in un’app funzionante. I file di build, in particolare, sono due: uno per tutto il progetto ed uno per il solo modulo app.
Design di layout
Un aspetto significativo di Android Studio consiste nell’anteprima di layout praticamente istantanea. Il pannello Design può essere utile per visualizzare rapidamente le modifiche apportate al sorgente XML, oppure per disegnare in modalità visuale l’interfaccia, trascinando controlli utente dalla Palette.
Activity, la “prima pagina” dell’applicazione
Per creare un’activity è necessario fare due cose:
- Estendere la classe Activity o una da essa derivata
- Registrare l’Activity nell’AndroidManifest.XML mediante l’uso di un apposito tag XML
Il codice Java che realizza l’activity risiede nella cartella src.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.
-
Marketing distributivo, concetti fondamentali
-
Diritto Privato - Concetti Fondamentali
-
E-Learning - Concetti fondamentali
-
Concetti fondamentali di fisica