gamecard

lunedì 3 dicembre 2012

Come gestire la memoria del proprio Android (e migliorarne le prestazioni)

Ormai Android è un sistema operativo molto diffuso (almeno quanto iOS) ma a differenza del sistema Apple, Android è distribuito su dispositivi hardware molto diversi in termini di dotazione e prestazioni.
Una delle caratteristiche fondamentali da tener presente quando si usa un dispositivo mobile è quello della gestione della Memoria RAM, quella che viene utilizzata dal sistema per far girare le applicazioni e i servizi del proprio dispositivo.


Android ha il vantaggio di essere un sistema multitasking ma come tutti i sistemi operativi di questo genere è molto importante avere la RAM capiente, questo perché in generale più RAM si possiede e più task (programmi e servizi) si possono tenere su contemporaneamente.
Nei dispositivi mobili è molto importante anche l'ottimizzazione del sistema per poter rendere il più snello possibile qualsiasi operazione effettuata sul telefono/tablet.
Questi due aspetti si traducono in una gestione molto specifica della memoria in funzione delle App avviate e quelle chiuse.
Il sistema di Google fornisce un suo sistema gestionale che segue criteri preimpostati, questi criteri poi possono essere modificati dai vari produttori hardware che magari preferiscono gestire in maniera diversa queste risorse.
Ma non dimentichiamoci che la filosofia di Android sta nella sua natura "open" e quindi anche noi utenti, se vogliamo, possiamo decidere come il nostro dispositivo deve poter gestire queste risorse!
Prima di andare avanti è bene chiarire come Android normalmente gestisce la RAM e i Task: i task sono suddivisi in 6 categorie ognuna delle quali viene gestita in maniera specifica dal sistema.

  • Foreground App: questa è l'App che in quel momento è avviata e visibile sullo schermo, è praticamente l'applicazione correntemente utilizzata dall'utente.
  • Visible App: queste sono invece le App che stanno in esecuzione ma NON sono visibili sullo schermo, in questa categoria vanno quelle app che magari sono state appena chiuse e che devono continuare a fare alcune operazioni, oppure alcune app specificatamente sviluppate per girare anche quando non visualizzano niente a video.
  • Secondary Server: queste non sono vere e proprie App ma sono servizi, i servizi sono dei task speciali che rilasciano funzionalità specifiche e che vengono normalmente sfruttate da altre App che ne hanno bisogno. In questa categoria vanno quindi quei servizi che sono ancora "vivi" perché stanno lavorando o perché hanno appena finito di fare la loro funzione.
  • Hidden App: queste sono quelle procedure (servizi) che NON sono più vive (perché magari hanno finito da tempo di essere utilizzate) e vengono inserite in uno stato dormiente (IDLE) nell'attesa di essere riutilizzate.Android NON cancella a priori queste procedure perché se le tiene in memoria possono essere "riesumate" più velocemente in caso di bisogno.
  • Content Provider: i content provider sono anch'essi servizi che però hanno il compito di fornire dati (di qualsiasi genere, un contatto, un sms, un filmato e così via). I content provider sono molto importanti perché tantissime App ne fanno uso, ad esempio Facebook piuttosto che Skype ne fanno uso per reperire i dati necessari al loro corretto funzionamento
  • Empty App: queste sono App che ormai sono state chiuse e che non stanno più girando. Di fatto sono App che non sono nemmeno più di tipo Visible. Queste App NON vengono cancellate a priori perché nel caso vengano riavviate, il sistema le potrà tirare su molto più velocemente.

Tutte le app che appartengono a queste categorie di fatto si contendono la RAM, il sistema operativo a fronte di un calo della RAM liberà operarà dei "tagli" alle app/service appartenenti a queste categorie al fine di liberare le risorse.
Di fatto queste 6 categorie possiedono 6 livelli di priorità diversi e, tanto per andare al sodo, il sistema tenta finché può di operare sulle Empty App (e subito dopo sulle Hidden App).

Ebbene queste operazioni di "ripulitura" della RAM occupa comunque risorse e tempo (e soprattutto drena la batteria) inoltre quando si usano App piuttosto pesanti (ad esempio giochi di un certo livello) occorre aver presente che se la RAM libera è elevata il gioco girerà molto velocemente, mentre se la RAM libera non è sufficiente il sistema la libererà in tempo reale rallentando di fatto le prestazioni del gioco o dell'app in foreground.
Il sistema di default di Android è piuttosto efficiente ma si può fare di più sicuramente!
Per coloro che vogliono addentrarsi in questo fine-tuning devono avere il telefono "rooted" e dotarsi di uno dei tantissimi programmi disponibili per la gestione della memoria (io uso Memory Boost ma ce ne sono una marea).
Di fatto queste app permettono di operare su queste 6 categorie e di impostare dei valori "minimi" di memoria libera che il sistema DEVE avere. Queste App non fanno altro che scrivere in un file di sistema presente in init.rc (l'immagine del sistema operativo) che descrive il comportamento che il sistema deve tenere con queste app.

Ormai queste App forniscono dei settaggi preconfigurati ma in generale quello che consiglio è

1) aumentare il valore di ram minimo per le empty app, questo permetterà di avere molta ram libera in più a discapito però di una cancellazione repentina di quelle App che sono ormai chiuse e questo si tradurrà in una minor velocità nel riavvio di tali app.

2) tentare di aumentare il valore minimo per le Hidden App ma con molta più cautela..questo perché i servizi potrebbero essere comunque fondamentali per il corretto funzionamento delle altre app.

Si potrebbe anche migliorare ulteriormente operando sulle Visible App ..il problema è che così facendo si ridurrà la capacità di gestire il multitasking nel sistema (nel senso che ci saranno pocchissime app contemporaneamente avviate).

Spero di essere stato utile con questo piccolo post.


Nessun commento: