Android, memoria e task killer: facciamo chiarezza

Android, memoria e task killer: facciamo chiarezza

Il sistema operativo di Google dedicato al mondo mobile gestisce la memoria di sistema a suo modo: spesso, questo, porta ad una incomprensione da parte dell'utente finale che si trova, così a terminare manualmente tutti i processi. Ma quanto questa operazione può avere senso? Nel corso di questo articolo proveremo a dare una risposta

di pubblicato il nel canale Telefonia
AndroidGoogle
 

I processi in Android e la gestione della memoria

La gestione che Android fa della memoria è piuttosto inusuale. Come Java e .NET, Android usa i propri runtime e virtual machine per gestire la memoria per le applicazioni. Diversamente da tali framework, però, il runtime Android gestisce anche l'attività di tali processi. Questo permette di poter garantire al sistema una importante reattività.

Android può pertanto attivare, disattivare e terminare determinati processi, al fine di allocare le corrette risorse per applicazioni che richiedono una altra priorità. Ogni applicazione Android lavora in un processo separato, con la sua istanza Dalvik dedicata, facendo riferimento al runtime Android per le risorse. Ed è così che possono essere gestite al meglio le attività all'interno del proprio terminale. Le istanze Dalvik e il runtime Android si trovano al di sopra del kernel Linux che gestisce le interazioni hardware, inclusi i driver e la gestione della memoria.

Come abbiamo spiegato nella pagina precedente le istanze Dalvik sono virtual machine ottimizzate per poter garantire il funzionamento di più processi, e si basano sul kernel Linux per gestire l'accesso alla memoria. Questo elemento rappresenta proprio uno dei pilastri su cui Android si fonda: invece che usare una classica virtual machine Java, come ad esempio Java ME (Java Mobile Edition), Android utilizza questa virtual personalizzata, al fine di poter garantire il corretto funzionamento di più istanze su di un singolo dispositivo.


Il ciclo che determina l'attività o meno di una app all'interno di Android

Tutti i servizi Android che hanno accesso a risorse sono gestiti utilizzando la VM Dalvik come livello intermedio: utilizzare la VM per ospitare le applicazioni in esecuzione , permette agli sviluppatori di avere un livello astratto che garantisce di non doversi mai preoccupare delle implementazioni hardware.

L'ordine con cui le applicazioni vengono terminate da Android è determinato dalla priorità di ogni singola applicazione. In questo modo, quindi, viene effettuata la prima scrematura. Quando due applicazioni hanno invece la stessa priorità, il processo che è stato ad un livello di priorità inferiore per maggior tempo, sarà terminato prima. La priorità è inoltre stabilita dalle interconnessioni che le applicazioni presentano: se un processo dipende direttamente da un servizio fornito da una seconda applicazione, ecco che quest'ultima acquisirà la priorità della prima.

Un elemento importante da sottolineare in Android è che tutte le applicazioni attive e attivate rimangono in memoria, fino a quando il sistema non necessiterà di nuove risorse per altre applicazioni.
Lo schema a seguire semplifica i livelli di priorità delle applicazioni in Android:

I livelli di priorità presenti in Android

La scelta della priorità di ogni applicazione risulta fondamentale per il corretto funzionamento sia dell'applicazione stessa che dell'intero sistema, ecco perchè rappresenta uno degli elementi più importanti da gestire in fase di programmazione. Osservando l'immagine sopra proposta appare chiaro come la priorità più alta sia assegnata ai cosiddetti processi attivi, quelli quindi con cui l'utente si trova ad avere una interazione diretta. Android concentra tutte le principali risorse a questo tipo di applicazioni, al fine di fornire all'utente una migliore esperienza di utilizzo. Tra i processi attivi, oltre a quelli utilizzati direttamente, sono presenti anche i servizi di telefonia.

Ad un livello inferiore troviamo i processi visibili e quelli avviati. Alla prima categoria appartengono le applicazioni che sono visibili ma che non devono rispondere attivamente a interazioni dell'utente finale, nella seconda categoria invece troviamo invece le applicazioni attive ma che non richiedono la presenza di una interfaccia visibile.

All'ultimo livello di priorità sono posizionati i processi in background, e che operano pertanto quando il telefono non viene utilizzato e i processi vuoti.

 
^