Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 5 di 97
  • livello avanzato
Indice lezioni

Il ciclo di vita di un'app Android

Impariamo a conoscere gli stati di esecuzione dell'applicazione nell'ecosistema di Android, comprendendo più in dettaglio i processi di un'app.
Impariamo a conoscere gli stati di esecuzione dell'applicazione nell'ecosistema di Android, comprendendo più in dettaglio i processi di un'app.
Link copiato negli appunti

Android sa che il fattore fondamentale della sopravvivenza di un sistema mobile è la corretta gestione delle risorse. Pensiamo ad uno smartphone: è un dispositivo che fa una vita difficile al giorno d'oggi. Non solo si occupa di chiamate ed SMS, ma offre pagine web, giochi, comunicazione sui “social” per molto tempo ogni giorno. Inoltre, capita sempre più spesso che non venga mai spento impedendo così una fase molto comune nella vita dei PC: l'arresto del sistema con conseguente liberazione della memoria e pulizia di risorse temporanee assegnate.

Android farà in modo di tenere in vita ogni processo il più a lungo possibile. Ciò non toglie che in alcune circostanze ed in base alle risorse hardware a disposizione, il sistema operativo si troverà nella necessità di dover liberare memoria abbattendo processi.

Sì ma: quale processo abbattere? La discriminante è quanto un'applicazione, candidata all'eliminazione, sia importante per la user experience. Maggiore sarà l'importanza riconosciuta, minori saranno le probabilità che venga arrestata.

Così facendo Android tenterà di raggiungere il suo duplice scopo: preservare il sistema e salvaguardare l'utente.

Segue una serie di criteri che spiegano come il sistema operativo valuta i processi in esecuzione e determina, eventualmente, quali abbattere. Si noterà come sia
stretto il legame tra un processo e le componenti
che esso attiva al suo interno. È proprio il corretto avvio di ogni operazione mediante la componente appropriata che permette al sistema di valutare l'importanza di un
processo. Ciò spiega, ad esempio, perché parlando di componenti abbiamo detto che un BroadcastReceiver dovrebbe svolgere le operazioni mediante Service o un JobService: solo
se il sistema vede il codice eseguito con queste componenti le percepisce come operazioni lunghe da portare avanti oltre la vita dello stesso BroadcastReceiver, altrimenti le
reputerebbe concluse con questo.

I processi possono essere classificati, in ordine di importanza decrescente, come:

  1. Processi in "foreground": sono quelli che  interagiscono direttamente o indirettamente con l'utente. Stiamo parlando delle applicazioni che, ad esempio,  contengono l'Activity attualmente utilizzata o i Service ad essa collegati. Questi sono i processi che Android tenterà di preservare maggiormente. Importante notare che, comunque, anche le applicazioni in foreground non sono del tutto al sicuro. Se ad esempio il sistema non disponesse di risorse sufficienti a mantenerli tutti in vita, si troverebbe costretto ad arrestarne qualcuno;
  2. Processi visibili: non sono importanti come quelli in foreground ma vengono anch'essi grandemente tutelati da Android. Infatti, avendo componenti ancora visibili all'utente anche se non vi interagiscono più, svolgono comunque un ruolo particolarmente critico. Anche in questo caso si tratta di Activity visibili e Service ad esse collegati;
  3. 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. Il loro livello di priorità può essere considerato medio: importanti sì ma non tanto quanto i processi di cui ai precedenti due punti;
  4. Processi "cached": sono l'ultima categoria e rappresentano 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 di altre categorie se non di questa. I cached process eliminati non rischiano di
    impattare minimamente sulla user experience e spesso contengono Activity che non sono più visibili.

Quando, nel corso della guida, esamineremo in dettaglio la realizzazione delle varie componenti di sistema – Activity, Service, ContentProvider e BroadcastReceiver come accennato nel capitolo precedente – vedremo come l'utente alla luce di quanto appena discusso sarà in grado di comprendere il reale funzionamento delle proprie applicazioni e di come esse vengano gestite dal sistema in ogni circostanza, più o meno favorevole.

Ti consigliamo anche