- Liittynyt
- 17.10.2016
- Viestejä
- 9 518
Muistinhallinta on ehkä eniten laitteen suorituskykyyn vaikuttava tekijä mutta jostain syystä se jää usein vähälle huomiolle. Tämän vuoksi ajattelin tehdä aiheesta oman ketjun. Kirjoitin ketjua varten pienen teoriaosion, joka (toivottavasti) helpottaa Androidin muistinhallinnan ymmärtämistä. Osio saattaa sisältää joitain asiavirheitä, sillä en ole kehittäjä/koodari. Asiavirheistä saa ja pitää huomauttaa. Teoriaosio löytyy viestistä kaksi.
Jos et jaksa lukea koko tekstiä, niin tässä tiivistettynä helpoimmat toimenpiteet:
Androidin muistinhallinnassa tasapainoillaan koko ajan sen suhteen, kuinka paljon muistia pidetään vapaana ja minkä verran sovelluksia säilytetään välimuistissa. Kun muistia on käytettävissä runsaasti, suorituskykyongelmia ei yleensä ole. Toisinaan kuitenkin käy niin, että muistinhallinta on liian aggressiivista, jolloin muistikapasiteettia ei hyödynnetä kokonaisuudessan. Tämä ongelma on vaivannut etenkin Samsungin lippulaivoja sekä OnePlus 3 puhelinta ennen asiaa korjaavaa päivitystä. Ongelma on kuitenkin suhteellisen helppoa korjata build.prop fixillä, joka tosin vaatii rootin. (Toisin kuin OnePlus väittää, muistiin tallentaminen ei lisää akun kulutusta merkittävästi: An analysis of power consumption in a smartphone).
Pienellä muistilla varustetuissa laitteissa suorituskykyongelmat ovat yleisempiä. Liian useat käyttäjät käyttävät tähän lääkkeenä niin sanottuja Task Killereitä (Clean Masterilla yli 500 000 000 latausta ). Todellisuudessa Task Killerit aiheuttavat laitteelle vain enemmän ongelmia, sillä ne tyhjentävät laitteen välimuistin kokonaan ja sammuttavat aktiivisena olevia taustaprosesseja. Tämä hidastaa laitteen toimintaa ja aiheuttaa kissa hiiri -leikin. Sinällään taustaprosessien sammuttaminen on hyvä tapa parantaa laitteen suorityskykyä mutta se ei onnistu Task Killereillä, sillä Task Killerillä lopetettu taustaprosessi käynnistyy hetken kuluttua uudelleen. Uudelleen käynnistäminen ja sammuttaminen syö huomattavasti laitteen suorituskykyä ja erityisesti sen akkua. (Kts. Why clearing recent apps is a waste of time and task killers don't work). Painotan vielä kertaalleen: Task Killereillä ei voida oikeasti pysäyttää taustaprosesseja! Välimuistin manuaalinen tyhjentäminen on puolestaan lähes poikkeuksetta haitallista. Henkilökohtaisesti pidän välimuistin tyhjentämistä kannattavana korkeintaan silloin, kun vähäisellä muistilla varustetulla laitteella aukaistaan jokin raskas sovellus kuten peli.
Parhaiten laitteen suorituskykyä voidaan parantaa muistin käyttöön liittyen pitämällä aktiivisten sovellusten osuutta muistista mahdollisimman pienenä. Näin annetaan tilaa mahdollisimman isolle osalle välimuistia. Yksinkertaisesti paras ratkaisu on poistaa sellainen sovellus, jonka ei haluta pyörivän taustalla. Useimmiten sovellusta halutaan kuitenkin käyttää jossain muodossa, minkä vuoksi sen kokonaan poistaminen ei ole vaihtoehto. Toinen vaihtoehto on vaihtaa sovellus kevyempään vaihtoehtoon. Facebookkia voi käyttää esimerkiksi Chrome selaimella ilmoitusten kanssa. Etenkin launcherin vaihtamisella saadaan aikaan positiivisia tuloksia, sillä launcher on käytännössä jatkuvasti aktiivisena. Nova ja Apex launchereita pidetään yleisesti ottaen hyvinä vaihtoehtoina, mitä omat havainnot myös tukevat. (Kyseisillä launchereilla voidaan tehostaa laitteen toimintaa myös asettamalla välianimaatiot minimiin).
Taustaprosessien määrää voi myös hallita ottamalla kokonaan pois käytöstä joitain palveluita esimerkiksi Disable Service -sovelluksella (vaatii rootin). Toinen vaihtoehto on hallita eri palveluita, herätyksiä ja hälytyksi Amplify -sovelluksella (Xposed moduuli, vaatii rootin). Amplifyn avulla voidaan esimerkiksi ajastaa, kuinka usein jokin palvelu saa käynnistyä. Kolmas vaihtoehto on katkaista triggerit, jotka käynnistävät taustaprosesseja. Tämä onnistuu Greenify -sovelluksella. Greenify siis estää tietyn sovelluksen käynnistämisen taustalle mutta ei poista sovellusta muistista. Viestisovellusten (kuten WhatsApp) suhteen kannattaa kuitenkin asettaa poikkeuksia, mikäli haluaa vastaanottaa viestejä realiajassa.
En kirjoita tähän erillisiä ohjeita edellä mainituille sovelluksille (ainakaan toistaiseksi), sillä xda foorumilta löytyy ennestään hyviä oppaita. Extreme Battery Life Thread -ketjussa on hyviä vinkkejä Amplifylle ja Greenifylle. Opas on kirjoitettu akun keston parantamisen kannalta mutta samoilla toiminnoilla vähennetään taustaprosesseja. Disable Service -sovellukselle löytyy kattava lista pois päältä kytkettävistä palveluista esimerkiksi täältä.
Muistinhallintaa voi parantaa myös muilla toimenpiteillä mutta nämä vaativat jo ennemmän osaamista. Android* on Intel Platforms - Android* Memory Tuning for Android 5.0 and 5.1 -artikkelissa on esitelty kattavasti eri vaihtoehtoja. Se on hyvä tietopaketti, vaikka se onkin tehty Intelin alustoja varten. (Artikkeli on ajantasalla Lollipop ja Marhsmallow versioita ajatellen mutta Nougat versio tuo joitain muutoksia yhdistämällä JIT-periaatetta ART-virtuaalikoneeseen). Artikkelissa nostetaan esille seuraavat vaihtoehdot:
Kernel Memory Optimizations
Laitteille löytyy usein custom kerneleitä, joissa näistä asioista on huolehdittu, vaikka niitä "mainostetaankin" pääsääntöisesti kellotus, Governor ja I/O scheduler mahdollisuuksilla. Custom kerneleillä saadaan usein parannettua laitteen suorituskykyä tietynlaisissa olosuhteissa. Tämän vuoksi erilaisia custom kerneleitä on paljon suosituille laitteille.
Lisälukemista:
Jos et jaksa lukea koko tekstiä, niin tässä tiivistettynä helpoimmat toimenpiteet:
- ÄLÄ käytä Task Killereitä
- ÄLÄ tyhjennä viimeisimmät sovellukset näkymää jatkuvasti
- Käytä Greenify -sovellusta
- Käytä Nova tai Apex launcheria
- Asenna mahdollisimman vähän "turhia" sovelluksia ja poista käytöstä sellaiset järjestelmäsovellukset, joita et käytä. (Samsung laitteen omistajat voi disabloida bloatwaren Package Disabler Pro:lla).
- (Käytä laitteellesi ja käyttötavoillesi hyväksi havaittua custom kerneliä tai muokkaa kernelin ominaisuuksia Kernel Adiutor tai L Speed sovelluksilla)
Androidin muistinhallinnassa tasapainoillaan koko ajan sen suhteen, kuinka paljon muistia pidetään vapaana ja minkä verran sovelluksia säilytetään välimuistissa. Kun muistia on käytettävissä runsaasti, suorituskykyongelmia ei yleensä ole. Toisinaan kuitenkin käy niin, että muistinhallinta on liian aggressiivista, jolloin muistikapasiteettia ei hyödynnetä kokonaisuudessan. Tämä ongelma on vaivannut etenkin Samsungin lippulaivoja sekä OnePlus 3 puhelinta ennen asiaa korjaavaa päivitystä. Ongelma on kuitenkin suhteellisen helppoa korjata build.prop fixillä, joka tosin vaatii rootin. (Toisin kuin OnePlus väittää, muistiin tallentaminen ei lisää akun kulutusta merkittävästi: An analysis of power consumption in a smartphone).
The RAM, audio and flash subsystems consistently showed the lowest power consumption. While our micro-benchmarks showed that the peak power of the SD card could be substantial (50 mW), in practice the utilisation is low enough such that on average, negligible power is consumed. Even video playback, one of the more data-intensive uses of mobile devices, showed SD power well under 1 % of total power. RAM has similar characteristics; micro-benchmarks showed that RAM power can exceed CPU power in certain workloads, but in practical situations, CPU power overshadows RAM by a factor of two or more. Audio displayed a largely static power consumption in the range of 28–34 mW. Overall, RAM, audio and SD have little effect on the power consumption of the device, and therefore offer little potential for energy optimisation.
Pienellä muistilla varustetuissa laitteissa suorituskykyongelmat ovat yleisempiä. Liian useat käyttäjät käyttävät tähän lääkkeenä niin sanottuja Task Killereitä (Clean Masterilla yli 500 000 000 latausta ). Todellisuudessa Task Killerit aiheuttavat laitteelle vain enemmän ongelmia, sillä ne tyhjentävät laitteen välimuistin kokonaan ja sammuttavat aktiivisena olevia taustaprosesseja. Tämä hidastaa laitteen toimintaa ja aiheuttaa kissa hiiri -leikin. Sinällään taustaprosessien sammuttaminen on hyvä tapa parantaa laitteen suorityskykyä mutta se ei onnistu Task Killereillä, sillä Task Killerillä lopetettu taustaprosessi käynnistyy hetken kuluttua uudelleen. Uudelleen käynnistäminen ja sammuttaminen syö huomattavasti laitteen suorituskykyä ja erityisesti sen akkua. (Kts. Why clearing recent apps is a waste of time and task killers don't work). Painotan vielä kertaalleen: Task Killereillä ei voida oikeasti pysäyttää taustaprosesseja! Välimuistin manuaalinen tyhjentäminen on puolestaan lähes poikkeuksetta haitallista. Henkilökohtaisesti pidän välimuistin tyhjentämistä kannattavana korkeintaan silloin, kun vähäisellä muistilla varustetulla laitteella aukaistaan jokin raskas sovellus kuten peli.
Parhaiten laitteen suorituskykyä voidaan parantaa muistin käyttöön liittyen pitämällä aktiivisten sovellusten osuutta muistista mahdollisimman pienenä. Näin annetaan tilaa mahdollisimman isolle osalle välimuistia. Yksinkertaisesti paras ratkaisu on poistaa sellainen sovellus, jonka ei haluta pyörivän taustalla. Useimmiten sovellusta halutaan kuitenkin käyttää jossain muodossa, minkä vuoksi sen kokonaan poistaminen ei ole vaihtoehto. Toinen vaihtoehto on vaihtaa sovellus kevyempään vaihtoehtoon. Facebookkia voi käyttää esimerkiksi Chrome selaimella ilmoitusten kanssa. Etenkin launcherin vaihtamisella saadaan aikaan positiivisia tuloksia, sillä launcher on käytännössä jatkuvasti aktiivisena. Nova ja Apex launchereita pidetään yleisesti ottaen hyvinä vaihtoehtoina, mitä omat havainnot myös tukevat. (Kyseisillä launchereilla voidaan tehostaa laitteen toimintaa myös asettamalla välianimaatiot minimiin).
Taustaprosessien määrää voi myös hallita ottamalla kokonaan pois käytöstä joitain palveluita esimerkiksi Disable Service -sovelluksella (vaatii rootin). Toinen vaihtoehto on hallita eri palveluita, herätyksiä ja hälytyksi Amplify -sovelluksella (Xposed moduuli, vaatii rootin). Amplifyn avulla voidaan esimerkiksi ajastaa, kuinka usein jokin palvelu saa käynnistyä. Kolmas vaihtoehto on katkaista triggerit, jotka käynnistävät taustaprosesseja. Tämä onnistuu Greenify -sovelluksella. Greenify siis estää tietyn sovelluksen käynnistämisen taustalle mutta ei poista sovellusta muistista. Viestisovellusten (kuten WhatsApp) suhteen kannattaa kuitenkin asettaa poikkeuksia, mikäli haluaa vastaanottaa viestejä realiajassa.
En kirjoita tähän erillisiä ohjeita edellä mainituille sovelluksille (ainakaan toistaiseksi), sillä xda foorumilta löytyy ennestään hyviä oppaita. Extreme Battery Life Thread -ketjussa on hyviä vinkkejä Amplifylle ja Greenifylle. Opas on kirjoitettu akun keston parantamisen kannalta mutta samoilla toiminnoilla vähennetään taustaprosesseja. Disable Service -sovellukselle löytyy kattava lista pois päältä kytkettävistä palveluista esimerkiksi täältä.
Muistinhallintaa voi parantaa myös muilla toimenpiteillä mutta nämä vaativat jo ennemmän osaamista. Android* on Intel Platforms - Android* Memory Tuning for Android 5.0 and 5.1 -artikkelissa on esitelty kattavasti eri vaihtoehtoja. Se on hyvä tietopaketti, vaikka se onkin tehty Intelin alustoja varten. (Artikkeli on ajantasalla Lollipop ja Marhsmallow versioita ajatellen mutta Nougat versio tuo joitain muutoksia yhdistämällä JIT-periaatetta ART-virtuaalikoneeseen). Artikkelissa nostetaan esille seuraavat vaihtoehdot:
Kernel Memory Optimizations
- ZRAM Configuration
- Enabling Kernel Samepage Merging (KSM)
- Tuning the size of the Camera Pool
- Tuning the size of the Readahead Buffer
- Low Memory Killer (LMK) and Out of Memory adjustment (OOM)
- The low_ram flag
- Minimal Application set
Laitteille löytyy usein custom kerneleitä, joissa näistä asioista on huolehdittu, vaikka niitä "mainostetaankin" pääsääntöisesti kellotus, Governor ja I/O scheduler mahdollisuuksilla. Custom kerneleillä saadaan usein parannettua laitteen suorituskykyä tietynlaisissa olosuhteissa. Tämän vuoksi erilaisia custom kerneleitä on paljon suosituille laitteille.
Lisälukemista:
Viimeksi muokattu: