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:
- Processi in "foreground"
- Processi visibili
- Processi "service"
- Processi "cached"
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
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.