Android - #5

Gestione della memoria

Come viene utilizzata dalle applicazioni

Il processo di gestione della memoria di Android assicura la disponibilità per l'allocazione stoppando e killando i processi con priorità inferiore a favore di quelli con priorità più alta.
L'ordine con il quale i processi vengono killati dipende quindi dalla priorità della relativa applicazione. La priorità dell'applicazione è la stessa del livello più alto fra i suoi componenti.

Quando due applicazioni hanno la stessa priorità il processo che ha avuto il livello più basso per più tempo sarà killato per primo. La priorità del processo è anche dettata dalla varie dipendenze, esempio: se un applicazione ha una dipendenza su un servizio fornito da un'altra applicazione, la seconda applicazione avrà al meno la priorità dell'applicazione che supporta.

In Android, come dicevo, le applicazioni restano in memoria fino a che il sistema necessita di risorse per altre applicazioni.




E' molto importante per un applicazione aver settato correttamente le priorità, altrimenti rischia di essere killata nel mentre sta eseguendo qualcosa di importante.

Vediamo nel dettagli gli stati illustrati qui sopra:

Active Processes I processi attivi (foreground) sono quei componenti che al momento interagiscono con l'utente. Questi processi solitamente sono pochi, e molto difficilmente vengono killati.

Visible Processes Sono visibili ma inattivi ed ospitano attività "visibili". Praticamente sono visibili ma non in foreground, ovvero, rispondono a determinti input dell'utente.

Started Service Processes Sono quei processi che ospitano servizi in esecuzione, ovvero quei processi che vengono eseguiti senza alcuna interfaccia visible. Questi hanno una priorità leggermente più bassa rispetto ai processi Attivi di cui sopra. Sono comunque considerati processi foreground e non sono killati fino a che non servono risorse agli Active.

Background Processes Sono quei processi che non sono visibili e non hanno alcun servizio che è stato avviato. Questi processi vengono killati per ottenere risorse per le applicazioni foreground.

Empty Processes Per ottenere una miglior performance, Android spesso mantiene le applicazioni in memoria dopo che il loro ciclo di vita è terminato. Il sistema operativo mantiene la cache per migliorare il tempo di avvio dell'applicazione nel caso venga richiamata. Questi processi vengono killati quando richiesto per allocazione nuove risorse.

Come migliorare l'efficenza della memoria

Abbiamo visto che Android chiude le applicazioni quando il sistema ha bisogno di ulteriori risorse. Tuttavia molti utenti non sono proprio soddisfatti di questo metodo (io sono fra quelli) perchè spesso vengono lasciati molti processi attivi che a sua volta causano qualche problemino di performace. Per questo vengono sviluppati i Task Killer/Task Manager che sono molto utili.

In questo modo evitiamo ad Android di gestire il "recupero" della memoria per le nuove allocazioni in quanto, in linea di massima, è sempre disponibile. Questo evita molti LAG e rallentamenti purtroppo riscontrati da molti.

Gestione MINFREE

Un'altra cosa che spesso viene eseguita da questi "ottimizzatori" della memoria avviene tramite i parametri di MINREE, ovvero impostando dei "limiti" entro i quali devono killati i processi con meno prioprità.


Links: