Android laitteen muistinhallinta (Task Killerit)

FlyingAntero

ɑ n d r o i d
Tukijäsen
Liittynyt
17.10.2016
Viestejä
9 573
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:
  1. ÄLÄ käytä Task Killereitä
  2. ÄLÄ tyhjennä viimeisimmät sovellukset näkymää jatkuvasti
  3. Käytä Greenify -sovellusta
  4. Käytä Nova tai Apex launcheria
  5. 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).
  6. (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 :facepalm::confused:). 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
Android Memory Optimizations
  • Low Memory Killer (LMK) and Out of Memory adjustment (OOM)
  • The low_ram flag
  • Minimal Application set
Yllä olevat vaihtoehdot vaikuttavat etenkin kernelin toimintaan. Joitain edellä mainittuja arvoja voi muuttaa Kernel Adiutor -sovelluksella (vaatii rootin). Kernel Adiutorilla tehtävät muutokset ovat kuitenkin usein kompromisseja sen suhteen, miten laite toimii tietyssä tilanteessa. Laitteen yleistä suorityskykyä voidaan esimerkiksi parantaa pitämällä muistia vapaana erittäin vähän. Tällainen toiminta voi kuitenkin aiheuttaa laitteen jäätymisen avattaessa erityisen isoa sovellusta (Garbage Collector). ZRAM-muistin käyttöönottaminen on perusteltua laitteissa, joissa on 1Gb muistia tai vähemmän. (1Gb:tä muistia vasten suositellaan 400Mb ZRAM:ia). Helpommin omaksuttava vastine Kernel Adiutorille on L Speed (vaatii rootin). L Speed sovellus sisältää valmiiksi erilaisia optimointeja muistinhallintaan.

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:
Android laitteen muistinhallinta: Teoriaosio

Mitä muisti on?

Lähdetään liikkeelle tutkimalla, mitä muisti itseasiassa on? Tässä tilanteessa muistilla tarkoitetaan keskusmuistia eli käyttömuistia, mikä on eri asia kuin massamuisti (=tallennustila). Muisti on tyypiltään luku- ja kirjoitusmuistia (RAM, Random Access Memory), minkä vuoksi siitä käytetään myös nimitystä RAM. Muistiin latautuvat käyttöjärjestelmän ohjelmat, suoritettavat sovellukset sekä näiden tarvitsemat tiedot. Kerran muistiin ladattu ohjelma toimii nopeammin ja on nopeammin saatavilla kuin jos ohjelma täytyisi ladata huomattavasti hitaammasta massamuistista.

Välimuisti

Muisti täyttyy periaatteessa kahdella tavalla. Havainnollistetaan tätä käyttäen apuna Android Lollipop version muistinhallinta näkymää:
Muistin.jpg
Ensimmäisessä kuvassa on normaali muistinhallinta näkymä ja kolmannessa kuvassa näkymään on otettu mukaan välimuistiprosessit kuvan kaksi mukaisesti. Ensimmäisessä kuvassa muistia on käytettävissä 455Mt ja kolmannessa huomattavasti vähemmän 316Mt. Lukemien erotus on 139Mt, mikä on hyvin lähellä kuvan kolme ilmoittamaa 143Mt:n välimuistia. (4Mt heitto johtuu siitä, että muistinkäyttö elää koko ajan). Kuvan kolme ilmoittama käytetty muisti (216Mt) kertoo, kuinka paljon järjestelmä ja aktiiviset sovellukset vievät tällä hetkellä muistia. Välimuisti (143Mt) puolestaan kertoo, kuinka paljon muistiin on tallennettu sovelluksen tietoja, mikä on siirtynyt ei-aktiiviseksi (idle). (Marshmallow versiossa muistinhallinta on muuttunut ja hallintanäkymästä ei voi enää erotella välimuistiprosesseja. Lollipopin näkymä löytyy kuitenkin edelleen kehittäjäasetuksien takaa kohdasta "Käynnissä olevat palvelut". Muistin käyttöä voi tutkia myös kattavammin esimerkiksi Ram Truth -sovelluksella).

Muistissa on siis aktiivisesti toimivia sovelluksia ja ei-aktiivisia välimuistiprosesseja. Molemmat näistä vievät muistia mutta välimuistia voidaan tarvittaessa vapauttaa aktiivisten sovellusten tieltä. Palataan nyt aiempaan lauseeseen: ”Kerran muistiin ladattu ohjelma toimii nopeammin ja on nopeammin saatavilla”. Kyseisen lause kiteyttää lyhyesti sen, miksi Android laitteessa tallennetaan sovelluksia välimuistiin. Välimuisti on hyvä asia Androidissa, sillä se parantaa laitteen suorituskykyä. Teoriassa voidaan sanoa, mitä enemmän välimuistiin on tallennettu tietoja, sen parempi.

Lollipopissa ja sen jälkeisissä Android versioissa välimuistin rooli on entistä merkittävimmässä osassa suorituskyvyn kannalta. Android siirtyi Lollipopissa käyttämään ART-virtuaalikonetta Dalvikin sijaan. ART käyttää AOT-prosessia (Ahead-of-Time) Dalvikin JIT-prosessin (Just-in-Time) sijaan. Lyhyesti selitettynä ART tekee suuren osan työstä etukäteen, kun taas Dalvik tekee työn juuri sillä hetkellä, kun prosessia kutsutaan. Tämä näkyy Androidissa siten, että Lollipopista lähtien päivitysten ja sovellusten asentaminen sekä laitteen ja sovellusten ensimmäinen käynnistäminen kestävät suhteellisesti kauemmin kuin KitKat versiossa. Tämä johtuu siitä, että ART ”valmistelee” asioita etukäteen. Varsinaisessa käytössä ART toimii kuitenkin pääsääntöisesti nopeammin kuin Dalvik, sillä toiminnot ovat valmisteltu etukäteen. Tämä ”valmistelu” tarkoittaa isompia sovellusten kokoja ja välimuistiin tallentamista. ART-virtuaalikoneessa välimuistin tyhjentäminen hidastaa laitteen toimintaa entistä enemmän verrattuna Dalvik-virtuaalikoneeseen. (Nougat päivitys yhdistää AOT- ja JIT-prosesseja profiloimalla käyttäjän käyttötapoja. Lisää Nougat päivityksen muutoksista voi lukea täältä).

Muistin täyttyminen

Android varaa muistia käytettäväksi pieninä kekoina (heap size). Google on määritellyt sovelluksille keko rajoitukset (heap size limit), jotka määräytyvät laitteen ominaisuuksien mukaan. Googlen antamat ohjeistukset ovat seuraavat (Lollipop ja Marshmallow):
android_memory_tuning1.jpg
5,5’’:n FullHD laitteelle keon koko on 96Mb normaalikokoisen ja 288Mb erittäin suuren sovelluksen osalta. Teoriassa yksittäinen sovellus voi käyttää kerrallaan vain 288Mb muistia kyseisessä laitteessa. Android ei voi kuitenkaan tietää etukäteen, kuinka paljon yksittäinen sovellus tulee vaatimaan muistia. Tämän vuoksi Android varaa muistista keskiarvon mukaisen alueen, jota se kykenee supistamaan tai laajentamaan tarpeen mukaan Googlen määrittelemissä rajoissa. Periaatteessa 5,5’’:n FullHD laitteelle riittäisi, että muistia on aina vapaana vähintään 288Mb. Tärkeää on kuitenkin huomata, että sovellus ei todellisuudessa käytä varattua kekoa kokonaan. Tämän vuoksi osa muistikapasiteetista valuu hukkaan, sillä vapaana oleva varattu muisti on periaatteessa toiselta sovellukselta pois. Keot aiheuttavat myös muistin pirstaloitumista, mikä syö käytettävissä olevaa muistia entisestään.

Muistin tyhjentäminen

Android laitteelle on oletuksena tietty valmistajan asettama MinFree arvo, joka määrittää, kuinka paljon muistia on pidettävä jatkuvasti vapaana. Kuten aiemmin mainittiin 5,5’’:n FullHD laitteelle riittäisi teoriassa, että muistia on vapaana vähintään 288Mb. Tämä ei kuitenkaan käytännössä toteudu, sillä sovellus ei välttämättä mahdu varatulle keolle tai keolla ei ole mahdollisuutta laajentua riittävästi. Syynä voi olla huonosti koodattu ohjelma tai muistin pirstaloituminen. Kun sovellus ei mahdu varatulle keolle, se antaa OutOfMemoryError ilmoituksen, joka käynnistää automaattisen roskienkerääjän (Garbage Collector = GC).

Muistin vapauttaminen Androidissa tapahtuu käyttämällä automaattista roskienkeräystä. Roskienkeräys itsessään sisältää useita algoritmeja, joten sitä ei voida käsitellä vain yhtenä toimintona. Esitellään tässä kuitenkin yksi algoritmeista eli kopiointi kerääjä. Kopiointi kerääjä merkitsee ensin poistettavat ja säästettävät tiedot yhdestä keosta. Alla olevassa kuvassa säästettävät tiedot ovat Obj 2 ja Obj 4.
image.png

Tämän jälkeen kerääjä kopioi säästettävät tiedot uuteen, vapaana olevaan osaan kekoa.
image.png

Lopuksi kopiointi kerääjä poistaa kaikki tiedot aiemmasta osasta kekoa.
image.png

Kyseinen metodi on erittäin tehokas mutta vaatii hetkellisesti enemmän muistia kuin käytössä itseasiassa oli (kopiointivaihe). Kopiointi kerääjää käyttäessä keosta täytyy olla aina vapaana sen verran, että kopioitava osa mahtuu keolle. Automaattinen roskienkerääjä onkin erittäin tehokas toimimaan silloin, kun muistia on runsaasti vapaana. Ongelmia ilmenee, kun muistia ei olekaan vapaana riittävästi.

Glyn Williamsin vastaus Quora-palvelussa sai pari vuotta sitten paljon huomiota (kts. suomalainen artikkeli). Williamsin mukaan roskienkeräys vie 4-8 kertaa enemmän muistia kuin mitä sovellus itseasiassa käytti. Williams viittasi vastauksessaan vuonna 2005 julkaistuun artikkeliin. Artikkelissa kuitenkin todetaan, että roskienkeräys toimii tehokkaasti, jos muistia on käytettävissä kolme (3) kertaa enemmän. Lisäksi tutkimus on jo yli 10 vuotta vanha. Nykyään roskienkeräys kykenee toimimaan tehokkaasti 1,6-2,5 kertaisella muistimäärällä riippuen käytettävästä algoritmista.

Alla olevista kuvista huomataan, että ennen kuin muistia saadaan vapautettua, nähdään muistin käytössä pieni nouseva piikki. Muistia joudutaan siis hetkellisesti käyttämään enemmän.
Muistinhallintaa.png

am_androidmon2_2x.png
Kopiointi kerääjän sijaan Androidissa käytetään ART:n myötä usein merkitse ja tiivistä (mark-compact) keräystä. Myös merkitse ja tiivistä metodi käyttää hetkellisesti enemmän muistia, mutta minulla ei ole tarkkaa tietoa, kuinka se toimii. Alla on esitetty havainnollistava kuva toiminnasta. Tällä metodilla pyritään ehkäisemään muistin pirstaloitumista.
muistiaaaaaa.png

Suorituskyvyn heikkeneminen

Yleensä muistin vapauttaminen tapahtuu LRU-menetelmällä (least recently used) mutta poikkeuksiakin on (esim. rajun muistipaineen alla saatetaan vapauttaa suurin sovellus välimuistista). Roskienkeräys on raskas prosessi, joka voi aiheuttaa viivettä laitteen toimintaan. Roskienkeräys pyritäänkin suorittamaan vasta sitten, kun sille on todellista tarvetta mutta kuitenkin ennen kuin on liian myöhäistä. Juuri tässä piilee roskienkeräyksen ongelma. Milloin on hyvä aikaa suorittaa roskienkeräys?

Roskienkeräys voidaan suorittaa periaatteessa kolmella tapaa. Alla on esitelty suuri (major) ja pieni (minor) keräys. Lisäksi on olemassa täydellinen keräys (full GC), joka poistaa kokonaisen keon kerralla.
image.png
Androidissa siis yhdistellään erilaisia roskienkeräys algoritmeja ja tapoja jatkuvasti. Sovelluskehittäjätkään eivät voi vaikuttaa siihen, milloin ja miten automaattinen roskienkeräys tapahtuu heidän sovelluksen kohdalla. Pääsääntöisesti roskienkeräys toimii tehokkaasti mutta kun roskienkerääjän vaatimaa "ylimääräistä" muistia ei ole käytettävissä tulee ongelmia. Tällöin puhutaan overhead -ilmiöstä. Roskienkeräys toimisi siis täydellisesti, jos muistia olisi käytettävissä rajattomasti. Näin ei kuitenkaan ole tosielämässä. Parhaiten roskienkeräystä voidaan "auttaa" pitämällä aktiivisena olevien sovellusten määrää alhaisena verrattuna välimuistin määrään. Välimuistia on helpompi vapauttaa kuin lopettaa aktiivisia sovelluksen, jolloin muistin loppuminen roskienkeräystä varten on epätodennäköisempää.

Lisälukemista:
 
Viimeksi muokattu:
Noinha se taitaa toimia. Suurempi muistimäärä kuluttaa tietenkin enempi sähköä, koska kaikki muistisolut täytyy pitää jokatapauksessa aktiivisena eli sähköistettynä, mutta jos se muisti on siellä koneessa jokatapauksessa olemassa, niin ei se enempää sähköä kuluta oli muistista käytössä 10% tai 100%.

Se toki nopeuttaa sovellusten käyttöä, kun ne ovat muistissa valmiina, mutta jotenkin minulle on aina ollut täysi mysteeri Androidin moniajo. Androidin pitäisi jäädyttää sovellukset taustalle, eli niiden ei pitäisi kuluttaa prosessoria ja sitäkautta sähköä kun puhelin on lukittuna. Aina välillä näin ei tapahdu, vaan jossain vaiheessa päivää huomaa kuinka puhelimen akkusta on mystisesti kadonnut hetkessä puolet. Ikävintä on jos näin käy yön aikana ja aamulla huomaa puhelimen olevan tyhjä, mahdollisesti jopa jättänyt herättämästä (juu, en käytä kännykkää herätyskellona tästä syystä). Akkumittari näyttää että yksi Appsi imee jopa >90% sähköstä, eli taustalle jää jokin prosessi aktiiviseksi, mahdollisesti jumiin, joka sitten syö kaikki sähköt kun puhelin on lukittuna taskussa tai yöpöydällä.

Olen huomannut että tätä voi minimoida jos pakolla sammuttaa taustalle jääneet sovellukset. Mitkään task-killerit eivät roottaamattomassa Androidissa tosiaan tätä pysty tekemään, vaan sovellukst pitää käsin yksitellen pyhkäistä sammuksiin Androidin recent-app valikossa. Tämä on tietenkin aivan mahdoton tehtävä, jos/kun sovelluslista on satojen mittainen. Samsungin puhelimissa on onneksi vakiona, ja lähes kaikissa Custom ROMmeissa, on viimeisten sovellusten valikossa pikanappula, jolla kaikki recent appsit sammuu kerralla. Olen nyt tehnyt siitä tavan, että ainakin parikertaa päivässä tempaisen ne kaikki sieltä sileäksi, ja selvästi tuntuu että virtasyöpöttely on vähentynyt ja puhelin toimiikin nopeammin.
 
...Androidin pitäisi jäädyttää sovellukset taustalle, eli niiden ei pitäisi kuluttaa prosessoria ja sitäkautta sähköä kun puhelin on lukittuna. Aina välillä näin ei tapahdu, vaan jossain vaiheessa päivää huomaa kuinka puhelimen akkusta on mystisesti kadonnut hetkessä puolet. Ikävintä on jos näin käy yön aikana ja aamulla huomaa puhelimen olevan tyhjä, mahdollisesti jopa jättänyt herättämästä (juu, en käytä kännykkää herätyskellona tästä syystä). Akkumittari näyttää että yksi Appsi imee jopa >90% sähköstä, eli taustalle jää jokin prosessi aktiiviseksi, mahdollisesti jumiin, joka sitten syö kaikki sähköt kun puhelin on lukittuna taskussa tai yöpöydällä.
Tämä on selkeästi jonkin yksittäisen sovelluksen viallinen toiminta. Normaaleissa olosuhteissa tällaista ei pitäisi tapahtua. Eli sinne jää jokin palvelu pyörimään tai sitten jokin heräte (wakelock) yrittää koko ajan käynnistää jotain palvelua jatkuvasti. Greenifyn avulla tuollaiset bugit pystyy kitkemään pois, sillä Greenify estää palveluita käynnistymästä. Vaihtoehtoisesti kyseisen herätteen/palvelun toimintaa voi hallita Amplifyllä tai poistaa ongelma palvelun kokonaan käytöstä Disable Service -sovelluksella.

Recent App -valikosta kaikkien sovellusten pyyhkiminen on huono tapa toimia. Se korjaa oireen vain hetkellisesti kunnes kyseinen sovellus käynnistyy uudelleen ja vika uusiutuu.
Greenifyn kehittäjä sanoi:
Swiping away apps from recent tasks frequently is not a good practice, since it reduces the efficiency of process cache mechanism in Android, thus impact the performance of your device.

Swiping away apps from recent tasks kills the process of those apps, thus prevent them from being cached in memory. When you launch them later, it takes longer time and much more CPU cycles to create the process and re-initialize the app runtime.

Clearing recent tasks does free much memory, at the expense of later performance and battery consumption for launching those apps again. So if you have a device with 2G RAM, it gains no benefits in practice.

Tässä on vielä Googlen työntekijän Dianne Hackbornin kommentti, kuinka Recent App toimii:
Dianne Hackborn sanoi:
Actually, removing an entry in recent tasks will kill any background processes that exist for the process. It won't directly causes services to stop, however there is an API for them to find out the task was removed to decide if they want this to mean they should stop. This is so that removing say the recent task of an e-mail app won't cause it to stop checking for e-mail.

If you really want to completely stop an app, you can long press on recent tasks to go to app info, and hit force stop there. For stop is a complete kill of the app -- all processes are killed, all services stopped, all notifications removed, all alarms removed, etc. The app is not allowed to launch again until explicitly requested.
Tässä on vielä asiaan selvennös:
Dan Hulme sanoi:
So, it looks like the summary is that swiping an app out of the list will first kill all background processes for the app, then use on TaskRemoved to notify the app that the background task was removed. At that point it looks like it's up to the app to decide what happens, so I guess there technically isn't a hard-and-fast rule about what happens to the app beyond that point.
 
Viimeksi muokattu:
Laitan tähän vielä Dianne Hackbornin artikkelin vuodelta 2010, jossa hän avaa, kuinka moniajo toimii Androidissa: Multitasking the Android Way. Artikkeli on jo vanha mutta perusperiaate on edelleen sama. Tässä lyhyesti artikkelin ydin:
Dianne Hackborn sanoi:
A key to how Android handles applications in this way is that processes don't shut down cleanly. When the user leaves an application, its process is kept around in the background, allowing it to continue working (for example downloading web pages) if needed, and come immediately to the foreground if the user returns to it. If a device never runs out of memory, then Android will keep all of these processes around, truly leaving all applications "running" all of the time.

Of course, there is a limited amount of memory, and to accommodate this Android must decide when to get rid of processes that are not needed. This leads to Android's process lifecycle, the rules it uses to decide how important each process is and thus the next one that should be dropped. These rules are based on both how important a process is for the user's current experience, as well as how long it has been since the process was last needed by the user.

Once Android determines that it needs to remove a process, it does this brutally, simply force-killing it. The kernel can then immediately reclaim all resources needed by the process, without relying on that application being well written and responsive to a polite request to exit. Allowing the kernel to immediately reclaim application resources makes it a lot easier to avoid serious out of memory situations.

If a user later returns to an application that’s been killed, Android needs a way to re-launch it in the same state as it was last seen, to preserve the “all applications are running all of the time” experience. This is done by keeping track of the parts of the application the user is aware of (the Activities), and re-starting them with information about the last state they were seen in. This last state is generated each time the user leaves that part of the application, not when it is killed, so that the kernel can later freely kill it without depending on the application to respond correctly at that point.
Käyttämällä Task Killereita romutetaan kokonaan Androidin muistinhallinta. Tällöin Android ei enään kykene toimimaan, kuten se on suunniteltu. Itse asiassa tämä aiheuttaa todennäköisesti enemmän OutOfMemoryError ilmoituksia kuin ilman Task Killereitä sen lisäksi, että yleinen suorituskyky hidastuu.

PS. Lisäsin teoriaosioon maininnan kehittäjäasetuksista löytyvästä muistinhallinta näkymästä Marhsmallow'ssa. Kyseinen näkymä on sama kuin mikä löytyy Lollipop versiosta suoraan asetuksista.

EDIT: Tässä selitettynä Nougat version ja tulevien Android versioiden parannuksia muistinhallintaan liittyen:
 
Viimeksi muokattu:
Tyhjennän moniajonäkymästä sovelluksia melko usein. Niitä kun siellä aina on vaan muutamia niin tottunut ottamaan ne pois.
 
Tyhjennän moniajonäkymästä sovelluksia melko usein. Niitä kun siellä aina on vaan muutamia niin tottunut ottamaan ne pois.
Lähtökohtaisesti niin ei kannattaisi tehdä suorituskyvyn kannalta. Toki jos sitä näkymää haluaa pitää siistinä käytännön syistä, niin sitten sitä voi tyhjätä toisinaan. Jatkuvasti niin ei kuitenkaan kannata tehdä. Sivusin tätä myös toisessa ketjussa.

Kunhan nyt ainakin tiedostaa, että artikkelin viimeinen ohje aiheuttaa vain haittaa: "Sovelluskaupasta löytyy myös tusinoittain sovelluksia, jotka avustavat esimerkiksi turhien sovellusten sulkemisessa. Tällainen on muun muassa ilmainen Advanced Task Killer". Clean Master, DU Speed Booster jne. kaikki ovat ihan turhia.
 
Lähtökohtaisesti niin ei kannattaisi tehdä suorituskyvyn kannalta. Toki jos sitä näkymää haluaa pitää siistinä käytännön syistä, niin sitten sitä voi tyhjätä toisinaan. Jatkuvasti niin ei kuitenkaan kannata tehdä. Sivusin tätä myös toisessa ketjussa.

Kunhan nyt ainakin tiedostaa, että artikkelin viimeinen ohje aiheuttaa vain haittaa: "Sovelluskaupasta löytyy myös tusinoittain sovelluksia, jotka avustavat esimerkiksi turhien sovellusten sulkemisessa. Tällainen on muun muassa ilmainen Advanced Task Killer". Clean Master, DU Speed Booster jne. kaikki ovat ihan turhia.
En ole huomannut mitään eroja suorituskyvyssä suljin niitä tai en. Se on vaan tapa mikä on jäänyt enkä usko että siitä olisi mitään haittaa.
 
Oikein hyvää tietoa tuosta muistinhallinnasta ja valitettavaa miten huonosti tuo on ihmisillä tiedossa. Aloituspostaukseen ehkä voisi lisätä myös PackageDisablerin. Olen sillä deaktivoinut noita Samsungien bloatwareja, kun niitä ei voi poistaa ilman roottia. Tuolla tavalla saa S6 Edgen akun kestämään kevyellä käytöllä lähemmäs pari vuorokautta.

Tämän jälkeen voi tehdä vaikka Taskerilla omia profiileja esim. yöksi ettei ledi turhaan vilku ja puhelin on "älä häiritse tilassa". Lisäksi kannattaa hommata jokin fiksu sovellus näytön kirkkauden säätöön (Esim. Velis Auto Brightness).

Silti ihmiset asentavat vain sen höpönlöpö-memory-free - sovelluksen, 14 erilaista somesovellusta, näyttö loistaa pimeässäkin kuin aurinko ja sitten valitetaan kun akku ei kestä vuorokautta.
 
En ole huomannut mitään eroja suorituskyvyssä suljin niitä tai en. Se on vaan tapa mikä on jäänyt enkä usko että siitä olisi mitään haittaa.
Yksittäisen sovelluksen satunnainen pois pyyhkiminen ei todennäköisesti vaikuta juuri mihinkään mutta ei siitä hyötyäkään ole. Jatkuva välimuistin tyhjentäminen on kuitenkin haitallista:
Greenifyn kehittäjä sanoi:
Swiping away apps from recent tasks frequently is not a good practice, since it reduces the efficiency of process cache mechanism in Android, thus impact the performance of your device.

Swiping away apps from recent tasks kills the process of those apps, thus prevent them from being cached in memory. When you launch them later, it takes longer time and much more CPU cycles to create the process and re-initialize the app runtime.

Clearing recent tasks does free much memory, at the expense of later performance and battery consumption for launching those apps again. So if you have a device with 2G RAM, it gains no benefits in practice.
Oikein hyvää tietoa tuosta muistinhallinnasta ja valitettavaa miten huonosti tuo on ihmisillä tiedossa. Aloituspostaukseen ehkä voisi lisätä myös PackageDisablerin. Olen sillä deaktivoinut noita Samsungien bloatwareja, kun niitä ei voi poistaa ilman roottia. Tuolla tavalla saa S6 Edgen akun kestämään kevyellä käytöllä lähemmäs pari vuorokautta.

Tämän jälkeen voi tehdä vaikka Taskerilla omia profiileja esim. yöksi ettei ledi turhaan vilku ja puhelin on "älä häiritse tilassa". Lisäksi kannattaa hommata jokin fiksu sovellus näytön kirkkauden säätöön (Esim. Velis Auto Brightness).

Silti ihmiset asentavat vain sen höpönlöpö-memory-free - sovelluksen, 14 erilaista somesovellusta, näyttö loistaa pimeässäkin kuin aurinko ja sitten valitetaan kun akku ei kestä vuorokautta.
Tuo PackageDisabler tosiaan on hyvä sovellus. Itse asiassa ensimmäinen asia, mitä Android puhelimelle teen ennen käyttöönottoa, on käydä asetuksista "turhat" sovellukset läpi ja disabloida/poistaa ne. Valmistajilla, kuten Samsungilla, on paha taipumus lisätä (ainakin itselle) tarpeettomia sovelluksia Androidiin. Aivan kuin niitä ei Googlen puolesta olisi jo tarpeeksi (ei sentään enään niin paljon kuin ennen). Toki joillekin ne voivat olla hyödyllisiä.
 
Yksittäisen sovelluksen satunnainen pois pyyhkiminen ei todennäköisesti vaikuta juuri mihinkään mutta ei siitä hyötyäkään ole. Jatkuva välimuistin tyhjentäminen on kuitenkin haitallista:
Omalla kohdallani en ole huomannut mitään poikkeavaa akunkestossa tai missään muussakaan. Noita artikkeleita on vaikka mitä ja kaikkiin suhtaudun skeptisesti. Joku voinee tehdä sitten toisin.
 
Omalla kohdallani en ole huomannut mitään poikkeavaa akunkestossa tai missään muussakaan. Noita artikkeleita on vaikka mitä ja kaikkiin suhtaudun skeptisesti. Joku voinee tehdä sitten toisin.
Artikkeleita tosiaan löytyy joka lähtöön, kuten tuo puhelinvertailu.com uutinen osoittaa, mutta tuossa ylempänä oli viitattu Googlen työntekijän Hiroshi Lockheimerin (VP Engineering (Android) at Google) kommenttiin:

 
Tiedossa on tuokin. Teen kuitenkin niin miten itse parhaaksi näen. Kun ei niitä ongelmia ole esiintynyt.
 
Nougatissahan recents valikossa on enää 5 tai 7 viimeisintä ohjelmaa, muut poistuvat automaattisesti.

Recent Apps is no longer a near-infinite list of everything you've ever opened. Thumbnails are automatically culled from the list in Nougat. How exactly this works isn't clear. There doesn't seem to be a hard cap on how many thumbnails you can have, but leave the device alone for a bit and the thumbnails will automatically be reduced to as low as five. If you scroll all the way to the end of the Recent Apps list, you'll now be greeted by a "Clear All" button. http://arstechnica.com/gadgets/2016...iew-do-more-on-your-gigantic-smartphone/4/#h1
 
Viimeksi muokattu:
Tämä ketju on varmaan hyvä paikka kysyä, että onko mitään väliä että sammuttaako sovelluksen painamalla Takaisin-nappulaa kunnes sovellus sammuu, vai painaako vain koti-nappia?
 
Tämä ketju on varmaan hyvä paikka kysyä, että onko mitään väliä että sammuttaako sovelluksen painamalla Takaisin-nappulaa kunnes sovellus sammuu, vai painaako vain koti-nappia?
Onhan siinä usein eroa. Usein back nappia näpyttämällä ohjelma palaa takaisin alkuasetelmaan, kotinäppäimellä jaa nykyiseen tilaan taustalle. Tosin back nappulan toiminta ei ole kovin tarkoin määriteltyä joten voi tehdä mitä milloinkin.
 
Tämä ketju on varmaan hyvä paikka kysyä, että onko mitään väliä että sammuttaako sovelluksen painamalla Takaisin-nappulaa kunnes sovellus sammuu, vai painaako vain koti-nappia?
Takaisin painike tuhoaa [OnDestroy()] käynnissä olevan prosessin ja palaa edelliseen prosessiin. Kotipainike puolestaan pysäyttää [OnStop()] käynnissä olevan prosessin ja siirtyy kotinäkymään. Jos siirtyy viimeisimmät sovellukset valikon kautta toiseen sovellukseen niin toiminta periaate on sama kuin kotipainikkeen kautta avaisi uuden sovelluksen kotinäkymästä (tai sovellusvalikosta). Prosessia ei siis tuhota kuten takaisin painikkeella. Tässä vielä havainnollistava video:


Android-Activity-Lifecycle.png

Tärkeää on kuitenkin huomata, että OnDestroy() metodi ei "tapa" koko sovellusta vaan ainoastaan käynnissä olevan prosessin Back Stackistä. Back Stack on eri asia kuin teoriaosuudessa mainittu keko (heap). (Molemmat ovat siis tallenettuna ram-muistiin). Täten sovellus säilyy niiltä osin välimuistissa, kun on tarpeellista. Näin Sovellus avautuu nopeasti, kun siihen palataan, vaikka sen prosessi olisikin tuhottu Back Stackistä.

Takaisin painiketta painetaan silloin, kun halutaan palata edelliseen näkymään. Jos edellinen näkymä on kotinäkymä, niin käyttäjällä on vapaus valita jättääkö prosessi taustalle (kotipainike) vai tuhoaako sen saman tien (takaisin). Android osaa myös itse tuhota taustaprosessin, kun se on tarpeen tietyn ajan kuluttua:
Clearing the back stack sanoi:
If the user leaves a task for a long time, the system clears the task of all activities except the root activity. When the user returns to the task again, only the root activity is restored. The system behaves this way, because, after an extended amount of time, users likely have abandoned what they were doing before and are returning to the task to begin something new. (Tasks and Back Stack)

Sovelluskehittäjillä on toki mahdollisuus tehdä poikkeuksia tilanteen mukaan kuten Stunned ylempänä sanoi. Jotkin sovellukset vaativat painamaan kaksi kertaa takaisin painiketta ennen kuin suostuvat sulkeutumaan.
 
Kiitos, olikin paljon asioita joihin en ollut sen ihmeemmin aiemmin millään perehtynyt, lähinnä satunnaisesti vain todennut että taitaa vanha puhelin olla tukossa.
Nyt sainkin inspiraation koittaa vielä josko tuo S3 jaksaisi palvellla pidempään ja uuden puhelimen ostoa vois lykätä.
 
Ärsyttävin ominaisuus Androidissa on kun ohjelmat muistavat viimeisen tilansa, jos siis niitä ohjelmia ei erikseen sammuta.

Minä ainakin menen joka kerta täysin sekaisin kun käynnistän jonkun ohjelman ja siinä on jokin vanha juttu kesken, kuten kuvankatseluohjelmassa on viime viikonlopun pornokuvat auki, ES file explorerissa on jokin ihan outo PDF ja miljoona välilehteä sotkua, ja niin edespäin.

Haluan että kun käynnistän ohjelman, niin se aukeaa siihen alku tilaan, eikä siihen kun viimeeksi olin surffaamassa herutuskuvia. Se on minulle aivan sama kuluttakaa appien sammuttaminen 0.1% enemmän akkua, kunhan pääsen tuosta ärsyttävyydestä eroon.
 
@Nazi

Tämä nyt ei varsinaisesti liity muistinhallintaan mutta kuten tuossa ylempänä kerroin, niin takaisin ja koti näppäimet toimivat eri tavalla. Jos et halua palata samaan näkymään sovelluksessa, niin poistu siitä takaisin näppäimellä. Esimerkiksi laskin sovellus jättää laskut näkyville seuraavaa kertaa varten, jos "poistut" laskimesta kotinäppäimellä (ellei sitten Android koe tarpeelliseksi tyhjentää välimuistia jo aiemmin). Sen sijaan sovellus aukeaa tyhjänä, jos olet poistunut siitä takaisin näppäimellä.

Monessa sovelluksessa on kuitenkin useita eri näkymiä, joten välillä takaisin näppäintä pitäisi painaa useita kertoja kunnes sovelluksesta poistuttaisiin. Tällöin on ihan ok pyyhkäistä sovellus pois viimeisimmät sovellukset näkymästä, jos ei haluta palata samaan näkymään enään uudelleen. Tämä onnistuu esimerkiksi galleria sovelluksen kohdalla. Esimerkiksi nettiselain ei kuitenkaan toimi samalla tavalla vaan se säilyttää välilehdet pois pyyhkäisystä huolimatta. Kokonaan sovelluksen saa suljettua asetuksista (force stop). Itse kuitenkin suljen välilehden, kun haluan poistua joltakin sivulta. Mielestäni ei ole tarvetta sulkea (force stop) koko nettiselainta. (Toki yksittäiset välilehdet voi laittaa näkymään viimeisimmät sovellukset näkymään omina kortteinaan, jolloin ne poistetaan, kun sellaisen pyyhkäisee pois).

Jatkuvasti ei kannata tyhjentää viimeisimmät sovellukset näkymää suorituskyvyn kannalta joka kerta, kun lopetat kyseisen sovelluksen käytön. Satunnaisesti jonkin sovelluksen voi kuitenkin pyyhkiä pois esimerkiksi käytännön syistä tai poikkeustilanteissa.

Mitä tulee tuohon suorityskykyyn, niin DiscoMark mittaa sovelluksen käynnistysnopeuksi cold ja hot starteissa (ei toimi Nougatissa). Hot start tarkoittaa tilannetta, jossa sovellus aukaistaan välimuistista, ja cold start puolestaan ns. kylmiltään. Tässä tuloksia:
83374.png

83375.png
Muutamia poimintoja (Cold - Hot):
  • Honor 8: 329 - 166
  • OnePlus 3: 481 - 274
  • Nexus 6P: 854 - 246
Honor 8:lla testatut sovellukset aukeavat välimuistista lähes kaksi kertaa nopeammin ja Nexus 6P:llä jopa 3,5 kertaa nopeammin. Tässä vielä vanhempi tutkimus Android 4.4.2 versiolla Facebook sovelluksen kanssa.
Cold_Warm.png

PS. CyanogenMod romissa on ominaisuus, että pitkään takaisin painikkeen painaminen sulkee käynnissä olevan sovelluksen ilmeisesti samalla tavalla kuin pyyhkäisisi sen pois viimeisimmät sovellukset näkymästä. Hold Back To Kill apk:lla sen saa lisättyä myös muihin romeihin rootilla.
 
Viimeksi muokattu:
Ärsyttävin ominaisuus Androidissa on kun ohjelmat muistavat viimeisen tilansa, jos siis niitä ohjelmia ei erikseen sammuta.
Developer Options kautta saa ainakin joissakin puhelimissa säädettyä tuota "Don't keep activities" asetuksella, päällä ollessa sammuttaa ohjelmat kokonaan jolloin uudestaan käynnistäessä ohjelma alkaa aina alusta.
 
Developer Options kautta saa ainakin joissakin puhelimissa säädettyä tuota "Don't keep activities" asetuksella, päällä ollessa sammuttaa ohjelmat kokonaan jolloin uudestaan käynnistäessä ohjelma alkaa aina alusta.
Käsittääkseni tuolla ei voi vaikuttaa esimerkiksi siihen, että avautuuko galleria viimeksi katsottuun kuvaan vai ihan alkuun. Jos tuon asetuksen laittaa minimiin (don't keep activities), niin sovelluksia ei tallenneta Back Stackiin mutta sovellus löytyy edelleen välimuistista. Asetus ei siis tyhjennä välimuistia vaan tuhoaa [OnDestroy()] aktiivisen prosessin, kun sovelluksesta poistutaan (miten tahansa). Ainakin itsellä galleria avautuu samaan kuvaan kuin sieltä poistuttaessa tuo asetus minimissä. Päivittäisessä käytössä tuota asetusta ei pitäisi käyttää.
 
Viimeksi muokattu:
Kiitos hienosta tekstistä. Jokaisen androidin käyttäjän pitäisi lukea tämä ja sisäistää. @Sampsa tämä threadi pitäisi ehdottomasti kiinnittää.
 
Kaveri asenti puhelimeen jonkuin "akun säästö" ohjelman (oisko ollu 360 battery saver tjsp.) ja jonkuin ajan päästä ihmetteli, kun puhelin sammuilee ja buuttailee itsekseen. Eihän siinä, ko. softa mm. tappo aina launcherin, kun käyttis oli saanu sen käyntiin. :D
Ei mikään ihme jos puhelin vähän takkusi ja ei tominu normaalisti.
Tuon ko. softan kun poisti niin heti alko puhelin toimimaan taas normaalisti.
 
Facebook- ja Messenger-sovellukset ovat ainakin sellaisia, jotka jäävät jotenkin aktiiviseksi (vaikka Back-napilla poistuukin) ellei niitä pyyhkäise Viimeisimmät sovellukset -valikosta pois. Muutenkin niin bloattipaskaa nykyisin, ettei tunnu toimivan kuin lippulaivalaitteilla jotenkuten, muilla tahmaavat.
 
Facebook- ja Messenger-sovellukset ovat ainakin sellaisia, jotka jäävät jotenkin aktiiviseksi (vaikka Back-napilla poistuukin) ellei niitä pyyhkäise Viimeisimmät sovellukset -valikosta pois. Muutenkin niin bloattipaskaa nykyisin, ettei tunnu toimivan kuin lippulaivalaitteilla jotenkuten, muilla tahmaavat.
Facebook ja Messenger -sovellukset lähettävät aktiivisesti ilmoituksia ja viestejä samalla tavalla kuin esim. WhatsApp, joten ne eivät sulkeudu back napista. Siellä on siis koko ajan osa prosesseista aktiivisena. Facebook sovellus tosiaan on todella raskas ja suosittelen käyttämään Facebookkia selaimen kautta (https://m.facebook.com/).
 
Kaveri asenti puhelimeen jonkuin "akun säästö" ohjelman (oisko ollu 360 battery saver tjsp.) ja jonkuin ajan päästä ihmetteli, kun puhelin sammuilee ja buuttailee itsekseen. Eihän siinä, ko. softa mm. tappo aina launcherin, kun käyttis oli saanu sen käyntiin. :D
Ei mikään ihme jos puhelin vähän takkusi ja ei tominu normaalisti.
Tuon ko. softan kun poisti niin heti alko puhelin toimimaan taas normaalisti.
Eikös näissä 360 ohjelmissa ollut muutenkin jotain epämääräistä, sisältää vakoilutoimintoja tms.?
 
Itsellä paha neuroottinen tapa tappaa sovellukset pois kun en niitä tarvi. En kuitenkaan käytä mitään task-killeriä, hyi hyi ne on huonoja
 
Onko Ccleaneristä hyötyä tai haittaa?
Tässä on aika tyhjentävä vastaus:
Eli lyhyesti sanottuna siitä on haittaa "Task Killer" omaisuuden takia. Ilmeisesti käyttäjä voi kuitenkin valita vain massamuistin (=tallennustilan) siivouksen, mikä on hyvä ominaisuus. En ole käyttänyt sovellusta pitkään aikaan, joten ihan tarkkaa tietoa tästä ei ole. Massamuistin siivoukseen suosittelen kuitenkin käyttämään ihan periaatteesta SD Maid sovellusta. Siinä ei ole mitään "Task Killer"/"Ram booster" ominaisuuksia. Mukava nähdä, että vielä on tällaisia kehittäjiä, jotka eivät lisää sovellukseen haitallisia ominaisuuksia vain saadakseen lisää latauksia.

Tässä vielä SD Maidin kehittäjän mietteitä asiasta:
 
Kaksi kärpästä samalla iskulla, kun jättää cleanerit ja battery boosterit asentamatta. Vältyt haittaohjelmilta ja luurikin pysyy kuosissa. HummingWhale malware on raporoitu löytyvän ainakin seuraavista ohjelmista:
  • Cleaner: Safe and Fast
  • Fast Cleaner
  • Deep Cleaner
  • Hot Cleaner
  • Tiny Cleaner
Nämä tosin taisi olla vain tekaistuja sovelluksia cleaner nimellä, jotta saisivat mahd. paljon latauksia. Cleanerit on jostain syystä on kovin suosittuja sovelluksia :confused2:. Myös kamerasovelluksista oli tekaistuja appeja.
 
Noinha se taitaa toimia. Suurempi muistimäärä kuluttaa tietenkin enempi sähköä, koska kaikki muistisolut täytyy pitää jokatapauksessa aktiivisena eli sähköistettynä, mutta jos se muisti on siellä koneessa jokatapauksessa olemassa, niin ei se enempää sähköä kuluta oli muistista käytössä 10% tai 100%.
Asia ei ole LP-DDR:n kanssa pakosta aina näin, vaan osa muistista voidaan pitää tarvittaessa kokonaan virrattomanakin. Homma ei ymmärrettävästi ole ihan yksinkertainen käyttöjärjestelmän näkökulmasta, joten käytännön tuesta en ole varma.

PASR: Partial Array Self-Refresh Framework [LWN.net]
Patent EP2620838A1 - Automatic partial array self-refresh
 
Xposedin kehittäjä Rovo89 tiivisti mielestäni hyvin Nougat päivityksen tuomia muutoksia liittyen Androidin toimintaan ja muistinhallintaan:
Rovo89 sanoi:
With Nougat, something fundamental has changed. If you’re using Nougat already, you’ll have noticed that installations are much faster now. That’s because APKs aren’t compiled immediately (AOT), but start in (slower) interpreting mode. Sounds bad, but they have enabled JIT, which will quickly compile those methods that are used very often. That will restore the well-known and constantly improving performance of native code. Besides that, ART keeps a list of these frequently used methods (“profiling”). When the device is idle, it finally does the AOT compilation, but based on the profiling data. After that, you get the great performance right after starting the app. JIT is still waiting in case the usage patterns change, and I think it will also adjust the profile and improve the AOT compilation.
Tyhjentämällä turhaan muistin, käyttäjä voi sekoittaa tuon profiloinnin. Tämä aiheuttaa todennäköisesti suorituskyvyn heikkenemistä. Tuolla AOT/JIT profiloinnilla on tarkoitus vähentää muistinkäyttöä verrattuna Marhsmallow versioon:
Besides improving performance for key parts of the app, profile-guided compilation helps reduce an app's overall RAM footprint, including associated binaries. This feature is especially important on low-memory devices. (lähde)
 
Kiitokset hyvistä vinkeistä!

Amplifystä ei löytynyt läheskään kaikkia asetuksia, joita neuvottiin muokkaamaan tuolla XDA:n ketjussa. Poistelin Disable Servicesta ruksit kaikista kohdista, mitkä neuvottiin (poislukien GPS-hommat). Greenifyn asensin myös.

Gmail valitti käynnistyessä jotain, ettei kaikkia tarvittavia palveluja ole käytössä. Varoitusviesti ei tuntunut lähtevän millään, joten laittelin kaikki ruksit takaisin palveluhommissa. Mistä lie oli kiinni. Ei viihtinyt kokeilla yksi kerrallaan :)

Amplifyn takia Whatsappiin ei tullut viestejä reaaliajassa vaan vasta kun siirryin itse sovellukseen. En löytänyt Amplifystä mitään asetusta, josta olis voinu laittaa Whatsapille poikkeuksen. Greenifyssä toki asetus oikein. Muutin Amplifystä lähes summan mutikassa ennalleen asetuksia, jotka vähänkään kuulosti siltä, että ne vois vaikuttaa asiaan ja lopulta viestit alkoi tulla reaaliajassa.

Olisiko jollain on tietoa minkä palvelun disablointi vaikutti Gmailiin (toimi normaalisti, mutta varoitus aina käynnistyessä hieman kyrpi) ja minkä herätyksen/hälytyksen muokkaaminen sai Whatsapin jekkailemaan?
 
@Datsyuk13

Tuon varoituksen Googlen palveluissa (Gmail, Youtube) aiheuttaa todennäköisesti AnalyticsService. Jos haluaa käyttää näitä palveluita kirjautumalla sisään, niin kyseistä palvelua ei kannata disabloida. Tuossa laittamassani linkissä on ehkä vähän turhan rajulla kädellä lueteltu noita palveluita. Niiden disabloimisen kannattavuus riippuu ihan siitä, miten itse on luurian tottunut käyttämään.

Järkevää olisi ehkä asentaa Xposed Amplify ja jättää kaikki asetukset vakioksi. Viikon tai kahden kuluttua voisi sitten käydä katsomassa statiikkaa, että mitkä palvelut, hetätykset ja wakelocksit ovat siellä kärkipäässä. Niistä kannattaa sitten disabloida/rajoittaa sellaiset, joita ei koe tarvitsevansa.

Tässä vähän vinkkejä noihin palveluihin liittyen:
  • NlpLocationRecieverService (Rikkoo verkkopohjaisen paikannuksen, mutta GPS paikannus toimii edelleen)
  • GoogleLocationService (Rikkoo verkkopohjaisen paikannuksen, mutta GPS paikannus toimii edelleen)
Tuosta Whatsappista en osaa tarkkaan sanoa, mistä johtuu. Todennäköisesti ongelman aiheuttaa jokin hälytyksistä (alarms). Tuo Whatsapp vaikuttaa muutenkin olevan hieman ongelmallinen, sillä esim. Huawein omien virranhallinta asetuksien on raportoitu rikkovan Whatsappin toiminnan (linkki). Sinuna lähtisin ensin poistamaan hälytyksien rajoituksia kategoria kerrallaan (600 seconds, 1800 seconds, 3600 seconds jne.). Luulisi, että vian aiheuttaa jokin alkupään herätyksistä.
 
@Datsyuk13

Tuon varoituksen Googlen palveluissa (Gmail, Youtube) aiheuttaa todennäköisesti AnalyticsService. Jos haluaa käyttää näitä palveluita kirjautumalla sisään, niin kyseistä palvelua ei kannata disabloida. Tuossa laittamassani linkissä on ehkä vähän turhan rajulla kädellä lueteltu noita palveluita. Niiden disabloimisen kannattavuus riippuu ihan siitä, miten itse on luurian tottunut käyttämään.

Järkevää olisi ehkä asentaa Xposed Amplify ja jättää kaikki asetukset vakioksi. Viikon tai kahden kuluttua voisi sitten käydä katsomassa statiikkaa, että mitkä palvelut, hetätykset ja wakelocksit ovat siellä kärkipäässä. Niistä kannattaa sitten disabloida/rajoittaa sellaiset, joita ei koe tarvitsevansa.


Tuosta Whatsappista en osaa tarkkaan sanoa, mistä johtuu. Todennäköisesti ongelman aiheuttaa jokin hälytyksistä (alarms). Tuo Whatsapp vaikuttaa muutenkin olevan hieman ongelmallinen, sillä esim. Huawein omien virranhallinta asetuksien on raportoitu rikkovan Whatsappin toiminnan (linkki). Sinuna lähtisin ensin poistamaan hälytyksien rajoituksia kategoria kerrallaan (600 seconds, 1800 seconds, 3600 seconds jne.). Luulisi, että vian aiheuttaa jokin alkupään herätyksistä.

Lopettelin palveluja yksitellen ja huomasin, että FeedbackAsyncService, AnalyticsIntentService ja AnalyticsService pitää olla päällä, ettei Gmail varoittele. Kaikki muut sai sen puolesta ottaa pois päältä.

Amplifyssa huomasin, että com.droid27.tcw.ACTION_TIME_TICK aiheuttaa sääwidgetin ohella eniten hälytyksiä. Kelloonhan tuo liittynee, joten en uskalla muutella.

Whatsapp on kyllä mystinen. En kerennyt edes Amplifyyn asti säätämään kun huomasin, että Disable Servicen säätämisen jälkeen oli tullu reilu tunnin myöhässä Whatsapp-viestejä. Kokeilen nyt liittyykö tuo mitenkään noihin gcm-palveluihin. Jostain luin, että Whatsapp saattaa käyttää niitä, joten pistin ne takaisin päälle ja ainakin toistaiseksi viestit tulee reaaliajassa. Jos tulee vielä ongelmia niin kokeilen ainakin Amplifyn vakioasetuksia ja muuttelen vain enimmät sieltä.

Tein siis kaikki suositellut Disable Service ja Amplify-jutut, paitsi ne, jotka liittyy jotenki GPS:ään tai GCM:ään. Bootatessa tulee 2 tai 3 ilmotusta, että "Google Play Palvelut lakkasi toimimasta", mutta ainakin Play Kauppa, Gmail, Chrome ja Chromecast toimii normaalisti.
 
Avast ja AVG ovat tutkineet eri sovelluksien vaikutuksia Androidin toimintaan. Tutkimuksissa huomattiin, että esimerkiksi Clean Master tekee melkolailla päinvastoin kuin lupaa. Snapchat on listoilla selkeä ykkönen mutta se nyt on ollut tiedossa aiemminkin.
Avast (Q3 2016):
TopPERFORMANCEdrainingAPPSrunBYusers.png
AVG (H1 2016):
AVG.png
Tosin eivät nämä Avastin ja AVG:n vastaavat cleanerit ja boosterit ole yhtään sen parempia.
 
Android O dev preview julkaistiin eilen ja yksi mielenkiintoisista muutoksista koskee taustaprosesseja. Google syventää Nougattiin tekemiään muutoksia entisestään rajoittamalla taustalla pyörivien sovelluksen toimintoja. Rajoitukset on jaettu kolmeen osaan: implisiittiset lähetykset, taustapalvelut ja sijaintipäivitykset. Muutoksilla pyritään parantamaan muistinhallintaa (ehkäisemällä memory-thrashing ilmiötä) ja akun kestoa.
  • Implisiittisillä ("piilevä/epäsuora") lähetyksillä tarkoitetaan sellaisia lähetyksiä, jotka eivät suoraan kohdistu tiettyyn sovellukseen. Tällöin saman lähetyksen vastaanottaa usempi sovellus mutta suurimmalle osalle tällainen on turha. Jatkossa tällaisia lähetyksiä ei enään käytetä, jotta turhat rekisteröinnit saadaan kitkettyä pois.
  • Taustapalveluiden suhteen sovelluksilla on jatkossa tietty aikaraja taustapalveluiden suhteen. Kun tietty aikaraja umpautuu, niin taustaprosessit suljetaan automaattisesti. Tällä ehkäistään turhien taustapalveluiden pyörimistä taustalla.
  • Toistaiseksi taustaprosessien sijaintipäivitykset rajoitetaan muutamaan kertaan tunnissa. Google on kuitenkin sanonut, että sijaintipäivitysten kiintiötä vasta testataan preview yhteydesä. Kiintiötä tullaan säätämään palautteen perusteella sopivaksi.
Voisi sanoa, että teemaksi on otettu kaiken turhan karsiminen pois. Mitä vähemmän turhaa asiaa joudutaan prosessoimaan, niin sitä paremmin laite toimii.
 
Android O dev preview julkaistiin eilen ja yksi mielenkiintoisista muutoksista koskee taustaprosesseja. Google syventää Nougattiin tekemiään muutoksia entisestään rajoittamalla taustalla pyörivien sovelluksen toimintoja. Rajoitukset on jaettu kolmeen osaan: implisiittiset lähetykset, taustapalvelut ja sijaintipäivitykset. Muutoksilla pyritään parantamaan muistinhallintaa (ehkäisemällä memory-thrashing ilmiötä) ja akun kestoa.
  • Implisiittisillä ("piilevä/epäsuora") lähetyksillä tarkoitetaan sellaisia lähetyksiä, jotka eivät suoraan kohdistu tiettyyn sovellukseen. Tällöin saman lähetyksen vastaanottaa usempi sovellus mutta suurimmalle osalle tällainen on turha. Jatkossa tällaisia lähetyksiä ei enään käytetä, jotta turhat rekisteröinnit saadaan kitkettyä pois.
  • Taustapalveluiden suhteen sovelluksilla on jatkossa tietty aikaraja taustapalveluiden suhteen. Kun tietty aikaraja umpautuu, niin taustaprosessit suljetaan automaattisesti. Tällä ehkäistään turhien taustapalveluiden pyörimistä taustalla.
  • Toistaiseksi taustaprosessien sijaintipäivitykset rajoitetaan muutamaan kertaan tunnissa. Google on kuitenkin sanonut, että sijaintipäivitysten kiintiötä vasta testataan preview yhteydesä. Kiintiötä tullaan säätämään palautteen perusteella sopivaksi.
Voisi sanoa, että teemaksi on otettu kaiken turhan karsiminen pois. Mitä vähemmän turhaa asiaa joudutaan prosessoimaan, niin sitä paremmin laite toimii.
Edellisiin huomioihin liittyen Google rajoittaa valmistajien vapauksia taustapalvelujen suhteen:
It seems Android Oreo is very much an upgrade for the consumers in terms of fighting bad practice from OEMs, rather than an upgrade with more features.

Google seems to realize that certain OEMs love to implement their own versions of background app management features, but in doing so it causes a massive headache for application developers who don’t know how their app might behave on certain devices.
Vihdoinkin näille valmistajien sooluille laitetaan stoppi ja Androidin annetaan toimia, kuten sen on tarkoitettukin.

PS. How to Stop Wakelocks from Any Android App Without Root

EDIT: Sijaintipalvelut saattavat aiheuttaa vielä ongelmia Android Oreossa mutta siihen löytyy myös korjaus: How to Whitelist Apps from Android Oreo's Background Location Throttling
 
Viimeksi muokattu:
Tääläpä oli mielenkiintoista tekstiä!:) Ite käyttäny ccleanerii jonkun aikaa, mutta nytten lähiaikoina sen poistanut. Onko SD Maid jotenkuten hyödyllinen/oikeasti toimiva?:D

Tässä yritän saada Amplify softaa toimimaan (Oneplus 3T+LineageOS 14.1+magisk root+elementalX kernel) safetynet läpästy ja kaikki pitäs olla niiltä osin kunnossa mutta, kun avaan sovelluksen niin tulee "jokin meni pieleen. katsotaampa mikä ja korjataan se">seuraava>valittaa ettei ois rootti oikeuksia:D magiskin puolelta luvat annettu....
 
Viimeksi muokattu:
Tääläpä oli mielenkiintoista tekstiä!:) Ite käyttäny ccleanerii jonkun aikaa, mutta nytten lähiaikoina sen poistanut. Onko SD Maid jotenkuten hyödyllinen/oikeasti toimiva?:D

Tässä yritän saada Amplify softaa toimimaan (Oneplus 3T+LineageOS 14.1+magisk root+elementalX kernel) safetynet läpästy ja kaikki pitäs olla niiltä osin kunnossa mutta, kun avaan sovelluksen niin tulee "jokin meni pieleen. katsotaampa mikä ja korjataan se">seuraava>valittaa ettei ois rootti oikeuksia:D magiskin puolelta luvat annettu....
Ainakin tuolla SD Maidilla saa poistettua niitä turhia tiedoston rippeitä, joita sovelluksen poistamisesta saattaa jäädä. Siinä mielessä se on ihan hyödyllinen sovellus. Olihan sinulla Xposed asennettuna?
 
Ainakin tuolla SD Maidilla saa poistettua niitä turhia tiedoston rippeitä, joita sovelluksen poistamisesta saattaa jäädä. Siinä mielessä se on ihan hyödyllinen sovellus. Olihan sinulla Xposed asennettuna?
Tämä on SD Maidin hyödyllisin ominaisuus ja siihen tarkoitukseen alunperin olen asentanut CCleanerin mutta se on niin täynnä tauhkaa ettei sitä voi käyttää. En kyllä tiedä kuinka paljon noita rippeitä jää asennuksista vai onko tuo jo korjattu uudemmissa Androideissa?
 
Tämä on SD Maidin hyödyllisin ominaisuus ja siihen tarkoitukseen alunperin olen asentanut CCleanerin mutta se on niin täynnä tauhkaa ettei sitä voi käyttää. En kyllä tiedä kuinka paljon noita rippeitä jää asennuksista vai onko tuo jo korjattu uudemmissa Androideissa?
Sama ajatus on itselläkin ollut. Kyllä noita tyhjiä kansioita ja muuta tauhkaa näyttää myös Nougatissa kertyvän. Ei niillä varmaan suurta merkitystä ole mutta pysyypähän kansiot siistimpänä, kun ei ole turhia tiedostoja kummittelemassa.
 
Ainakin tuolla SD Maidilla saa poistettua niitä turhia tiedoston rippeitä, joita sovelluksen poistamisesta saattaa jäädä. Siinä mielessä se on ihan hyödyllinen sovellus. Olihan sinulla Xposed asennettuna?
Ei ole xposedia....mutta asennan sen niiin tarviiksbjoku moduuli sielt asentaa:tdown:
 
Ei ole xposedia....mutta asennan sen niiin tarviiksbjoku moduuli sielt asentaa:tdown:
Amplify vaatii toimiakseen myös Xposedin asennettuna. Nougatille ei ole toistaiseksi virallista Xposedia mutta epävirallisia löytyy:
Kehitys on kuitenkin vielä vaiheessa, joten pieniä ongelmia voi tulla vastaan. Lisäksi tuo Amplify vaatii pieniä fixauksia toimiakseen Nougatissa:
  • Partially Working:
    • Amplify: convert in System App and change all files permission to 777, SELinux permisive (linkki)
 
Amplify vaatii toimiakseen myös Xposedin asennettuna. Nougatille ei ole toistaiseksi virallista Xposedia mutta epävirallisia löytyy:
Kehitys on kuitenkin vielä vaiheessa, joten pieniä ongelmia voi tulla vastaan. Lisäksi tuo Amplify vaatii pieniä fixauksia toimiakseen Nougatissa:
  • Partially Working:
    • Amplify: convert in System App and change all files permission to 777, SELinux permisive (linkki)
Ok sain toimimaan xposedin, mutta....sen jälkeen ei tomi sim, eikä safetynet:D onks näihin jotai ratkasuu....lähen varmaa ettii netist, mutta enkku ei oo mikää älyttömän hyvä:D
 
Ok sain toimimaan xposedin, mutta....sen jälkeen ei tomi sim, eikä safetynet:D onks näihin jotai ratkasuu....lähen varmaa ettii netist, mutta enkku ei oo mikää älyttömän hyvä:D
Tuosta SIM ongelmasta en osaa sanoa mitään mutta Xposed rikkoo SafetyNetin:
ErnyTech sanoi:
XPOSED ALWAYS BREAKS SAFETYNET

This xposed is experimental so it might give some problems, I personally do not know any instability in my phone but i can not guarantee it
We have tested our Xposed version of the following devices successfully:
-Oneplus 3, with Android 7.1 Oxygen 20
Ehkä kannattaa uninstalloida Xposed ja yrittää uudelleen?
 
VLC:n kehittäjät ovat estäneet VLC for Android -sovelluksen lataamisen Huawein laitteille Play Kaupasta. Huawei käyttää EMUI käyttöliittymässään turhan agressiivista muistinhallintaa, minkä vuoksi taustalla soivan kappaleen toistaminen saattaa keskeytyä.
 

Statistiikka

Viestiketjuista
261 477
Viestejä
4 539 149
Jäsenet
74 803
Uusin jäsen
Mäntyvirta

Hinta.fi

Back
Ylös Bottom