Buona giornata a tutti, amici di Tuttoapp-android,
quest’oggi, grazie ad un mio amico, mi sono soffermato sul funzionamento della gestione ram del firmware Android e, per questo, ho deciso di pubblicare questa guida con lo scopo di illustrare a tutti come liberare memoria ram su Android e come possano essere dannose le app come task killer e/o ibernatori.
Girando sul web molti anzi troppi consigliano di fare uso di queste app “stupefacenti” per risolvere problemi di ram, prestazioni e durata batteria del nostro smartphone, che sia l’ultimo top di gamma o un vecchio telefonino che monti sempre il nostro piccolo robottino.
Ma allora… come liberare memoria ram su Android?
Per quanto questo sia il quesito principale cui la nostra guida vuole dare una risposta, non si può spiegare in poche parole come liberare memoria RAM su Android e, per una visione d’insieme che ti chiarifichi completamente le idee, dovrai affrontare una lettura lunga ma, si spera, piacevole.
Allora prima di proseguire, caro utente, prendiamoci un momento di pausa: visto il lavoro che ci aspetta è giusto andare con calma!
Cosa ne dici, intanto, di premiare il mio impegno semplicemente con un mi piace alle pagine presenti nei principali Social Networks o con la condivisione della guida in oggetto?
Guarda nella barra laterale: per noi è importante il tuo supporto! E non esitare a contattarci per qualsiasi dubbio: ecco a te la pagina dei contatti
Funzionamento basilare della ram…
Per sfatare questo mito possiamo cominciare spiegando con semplicità cosa succede quando avviamo un’applicazione: questa occupa RAM. Infatti una volta aperta ad essa verrà riservato uno spazio ben preciso nella memoria RAM, più o meno grande a seconda del peso della nostra applicazione, e verrà creata una java virtual machine anch’essa dedicata (la dalvik virtual machine da android 4.4.4 in giù. Con android 5.0 le cose cambiano un pochino ma questa è un’altra storia), ed essa non agirà direttamente sul sistema ma sarà il sistema ad eseguire ordini per conto dell’applicazione.
Consumo della batteria
La cosa importante è che il consumo di batteria e la reattività sono indipendenti dalla quantità di RAM occupata, ciò significa che vuota o piena il consumo che ne segue è identico. [Questo deve essere ben chiaro a tutti coloro che hanno uno smartphone/disposititvo Android. Se non lo sapevate, ora ne siete coscienti. Quindi fate attenzione, ora tutto deriverà da ciò.] Da questo si intuisce che la RAM deve essere piena per ottenere il massimo rendimento sia in termini di durata che di prestazioni ma vediamo perché.
… E ora vediamo nello specifico: Il Codice
Una volta avviata un’applicazione questa è in foreground. Un’applicazione si dice in foreground se la stiamo usando o se è utilizzata pienamente dal sistema ovvero occupa ram e sfrutta “l’hardware”(processore, traffico dati, GPS, accelerometro, NFC, bluetooth).
In codice essa si trova in uno stato di onCreate() onStart() onResume(), il ché vuol dire che l’applicazione compie delle azioni prima di avviarsi (connettersi, controllare aggiornamenti, caricare e ricevere dati), per questo quando viene avviata e mentre la si usa si ha il massimo consumo. Un’applicazione già avviata però non ripete gli stadi di onCreate() onStart() che richiedono un notevole consumo di energia, ciò significa che eseguendo un’applicazione già aperta abbiamo un minore consumo e una maggiore reattività perché vengono saltati degli stadi.
Quando passiamo ad un’altra applicazione, la precedente va in background. Un’applicazione in background non viene più usata ma continua ad occupare RAM (è come se fosse salvata li, ma non viene usata, se non poca poca, energia per farla restare li). Di solito le applicazioni vanno in background una volta che premiamo indietro o home, la differenza è che con il primo se riapriamo l’applicazione questa ripartirà dalla schermata iniziale come se l’avviassimo per la prima volta, con il secondo invece torneremo nel punto in cui ci siamo interrotti. Con i giochi di solito usare indietro significa chiudere il gioco, anche se usando home probabilmente sarà chiuso ugualmente per la quantità di RAM occupata sicuramente maggiore delle altre applicazioni. Android infatti chiude applicazioni in background o se ha bisogno di RAM o se esse non vengono usate per un certo periodo di tempo, viene usato il comando onDestroy() [comando che viene usato,i più esperti lo sanno, quando sfruttiamo il kill button nelle custom rom]. Questo però non avviene allo stesso modo per tutte le applicazioni; per capire ciò bisogna introdurre il concetto dei servizi.
I Servizi
I servizi servono alle applicazioni per svolgere delle attività; essi funzionano anche se l’applicazione è in background e ci permettono di compiere più azioni contemporaneamente (multitasking). Uno stesso servizio può essere usato anche da più applicazioni in modo da ottimizzare i consumi e grazie ad essi quindi un’applicazione può usare altre applicazioni già nella RAM condividendo sia lo spazio in RAM che la dalvik cache. Se un’applicazione in background non sfrutta servizi essa non consuma energia e non influisce sulla velocità perché come detto prima non usa nessuna risorsa e occupa solo il suo spazio nella RAM. In codice essa si trova nella condizione di onPause() onStop() e in caso venga riutilizzata si usa onRestart().
Tornando alla chiusura delle applicazioni in background questo dipende anche dai servizi che le applicazioni usano: vengono chiuse prima le applicazioni senza servizi e poi quelle con servizi, anche se con le moderne RAM c’è abbastanza spazio per mantenere tutti i servizi; però se ad esempio, aprissimo un gioco molto pesante, che richiede quindi molta RAM, vengono chiuse anche le applicazioni con servizi.
I WakeLock
Altra cosa da definire sono i wakelock: essi sono dei comandi dati al sistema dalle applicazioni che mettendo in azione il processore fanno “svegliare” (wake) quando lo schermo è spento impedendogli di andare in deepsleep, ovvero come suggerisce il nome, in uno stato di “sonno profondo” in cui cade il device quando lo schermo è spento in cui il sistema lavora il minimo indispensabile per risparmiare batteria; i wakelock perciò svegliano il device dal “torpore” aumentando così i consumi del dispositivo. Da chiarire però che i wakelock non sono tutti dannosi anzi alcuni sono necessari, senza essi infatti non potremmo ricevere notifiche. Quando lo schermo è spento uno smartphone senza wakelock con lo schermo spento è “morto” ossia non sarà in grado di sfruttare alcun servizio. Perciò bisogna capire quali wakelock tengono maggiormente sveglio il nostro device è, nel caso ce ne fosse qualcuno non necessario e troppo persistente, allora bisognerebbe cercare di ridurlo o di spegnerlo.
Leggi anche: Guarda e abbatti i tuoi wakelock
Una Piccola Conclusione
Come avrete finalmente capito, Android gestisce da solo le applicazioni da tenere aperte e da chiudere in base alle necessità del sistema in modo da ottenere sia migliori performance che migliore durata. Usare task killer non fa altro che impedire al sistema di fare il suo lavoro costringendolo a farlo male in quanto non è stato programmato per lavorare in quel modo. Inoltre Android tiene un log (una sorta di registro) delle applicazioni avviate, dei servizi, di tutto ciò che il sistema fa e che noi gli facciamo fare e cercando di adattarsi a tutto questo, forzando la chiusura delle applicazioni, interrompe bruscamente il log e sia Android, che l’applicazione stessa, non capendo cosa sia successo e quale sia il passo successivo agiscono di conseguenza interpretando come un errore la brusca interruzione. Ciò ha due conseguenze:
1) Android non impara niente
2) l’applicazione tende a riaprirsi per ovviare all’errore
Il risultato in entrambi i casi è che avete solo peggiorato la situazione consumando, inoltre, più energia poiché devono essere ripercorsi gli stati di avvio che, come già spiegato, sono molto dispendiosi.
Segui anche: Come velocizzare lo smartphone e non farlo crashare con Greenify
Per Quanto Riguarda L’Ibernazione
Stessa cosa per l’ibernazione: i servizi servono alle applicazioni, anzi lo stesso servizio serve a più applicazioni quindi quando avviate un’applicazione, se questa ha bisogno di un servizio di un’altra applicazione che avete ibernato, l’applicazione o costringe il sistema ad avviare ugualmente l’applicazione (maggiore lavoro = maggiori consumi) o non riesce a funzionare come si deve e cerca delle alternative (maggiore lavoro = maggiori consumi), cosa che succede già all’avvio di Android.
Se un’applicazione non vi serve semplicemente disinstallatela (magari facendo prima un backup per sicurezza), eviterete così al sistema un bel pò di lavoro.
La Vera Conclusione
Dopo tutto questo discorso, come consumare meno batteria? Installate un’applicazione che permetta di vedere le statistiche approfondite dell’uso della batteria, dei servizi
e dei wakelock, per risolvere il problema si deve capire quale sia, vedete cosa causa il maggior consumo di batteria e cercare di adottare delle contromisure senza agire sul sistema (noi ci siamo per questo), se ad esempio la sincronizzazione è troppo frequente basta aumentare il tempo tra una sincronizzazione e l’altra. Se i servizi di facebook, gmail, o qualsiasi altra applicazione che richieda l’accesso consumano troppo, basta effettuare il logout e l’applicazione non avrà bisogno di servizi se non quando effettuiamo il login, poiché quando lo effettuiamo diamo il comando al sistema di far partire i servizi dell’applicazione. Ovviamente bisogna riflettere prima di fare qualcosa: se controllate Facebook ogni 15 minuti o avete bisogno che vi arrivino le notifiche non serve effettuare il logout per poi rifare il login ogni volta, sarebbe ancora peggio. Insomma ciò che consuma batteria sono le fasi iniziali all’avvio dell’applicazione e i servizi di cui essa ha bisogno, per ovviare ai primi bisogna aprire l’applicazione e poi lasciarla in background e non fare aprì e chiudi, per i secondi invece il contrario, meglio aprire l’applicazione quando ne abbiamo bisogno e non lasciarla in background, però ricordo che chiudere applicazioni in background manualmente è dannoso, sia perchè i servizi di un’applicazione vengono usati anche da altre applicazioni e sia perchè un’applicazione in background senza servizi non consuma quindi basta disattivare i servizi e non chiudere l’applicazione. In conclusione, se un’applicazione la usate spesso lasciatela in background, se invece la usate raramente, ma davvero raramente, consiglio comunque di lasciarla in background perché i servizi se non li usate direttamente li usate indirettamente, però se proprio i servizi di quell’applicazione vi dimezzano la batteria allora bloccateli o rallentateli (beati quelli che usano il telefono solo per telefonare, già mio nonno ci gioca e si lamenta che gli dura poco xD).
Continua a leggere e ad approfondire la questione della ram seguendo questo link:
1) Risparmiare ram android con amplify bloccando i servizi
2) Come risparmiare batteria con xposed [Guida parte 2]
Salvatore Giordano, mio collega editore, la pensa come me. Leggi il suo articolo: No ai Ram Manager! Ram sprecata inutilmente!
In passato anche altri siti di spessore hanno trattato l’argomento: si veda per esempio l’idea di Claudio Pomes: Come gestire le app attive secondo Navigaweb
Se non vi è chiaro come liberare memoria RAM su Android e per qualsiasi chiarimento scrivete nei commenti o contattateci su Facebook.
Potrebbe interessarti anche: Wakelock e android kitkat: come farli andar d’accordo
In collaborazione con Matteo Mascione.
Ottimo articolo: ho capito molte cose.
A tal proposito vorrei sapere se è utile utilizzare la funzionalità, che in genere foriscono gli smartphone, di chiudere tutte le applicazioni attive.
Grazie
Caro Fabio,
come avrai capito dall’articolo, la chiusura di applicazioni comporta comunque una loro riapertura dopo un tot di tempo con un dispendio ancora maggiore di risorse.
Nel prossimo futuro, come suggerito dall’aggiornamento di Huawei a Nougat, gli smartphone dovrebbero memorizzare le nostre abitudini così da gestire ancora meglio ram e batteria aprendo solo le app che realmente utilizziamo spesso.
Il mio consiglio, pertanto, è di non usare task killer o chiusure forzate.
A presto,
Giovan Giuseppe Ferrandino
founder Tuttoapp-android.com
Avere un’app in background influisce sulla velocità del sistema, poiché se Android ha bisogno di Ram deve prima liberare quellla occupata.
dobbiamo distinuguere tra due tipi di app una che fornisce i servizi ed una invece che li usa. se l app di cui si parla è la prima il sistema sarà influenzato (sopratutto alla chiusura di essa); se è la seconda invece il sistema non ne risente perchè quando viene chiusa non utilizzerà più tutto quello spazio.
La ram android va per priorità quando un app deve essere eliminata dal background non ne viene aliminata una a caso ma quella più inutile possibile cioè quella che non influise più di tanto.
e poi spiego apertamente che un app in background occupa ram ma non sfruttando servizi come in foreground non influisce massivamente nella fluidità android. se segui i passaggi del codice potrai ben capire che un conto è eliminare un app in background, un conto è tenerla li e riaprirla.
Per questo un app in background sprecherebbe di più se chiusa terminando ogni processo mentre android che si autoregola non ci mette più di tanto ad eliminare un app chiudendola definitivamente quando serve.
non so se è chiaro 🙂 perdonami per il ritardo ma sono sotto esami 😛
rispondimi pure e a presto 🙂