The playground

More information here

muistivuodot Androidissa – tunnista, hoida ja vältä

Johan Olsson seuraa div> Apr 13, 2016 · 9 min read päivittäisessä pyrkimyksessämme rakentaa parempia sovelluksia meidän kehittäjien on otettava monia asioita huomioon pysyäksemme raiteillaan, joista yksi on varmistaa, että sovelluksemme eivät kaadu. Yleinen kaatumisten aiheuttaja ovat muistivuodot. Tämä erityinen ongelma voi ilmetä eri muodoissa. Useimmissa tapauksissa näemme tasaista kasvua muistin käyttö kunnes sovellus ei […]
Johan Olsson
Johan Olsson

seuraa

div>

Apr 13, 2016 · 9 min read

päivittäisessä pyrkimyksessämme rakentaa parempia sovelluksia meidän kehittäjien on otettava monia asioita huomioon pysyäksemme raiteillaan, joista yksi on varmistaa, että sovelluksemme eivät kaadu. Yleinen kaatumisten aiheuttaja ovat muistivuodot. Tämä erityinen ongelma voi ilmetä eri muodoissa. Useimmissa tapauksissa näemme tasaista kasvua muistin käyttö kunnes sovellus ei voi jakaa enemmän resursseja ja väistämättä kaatuu. Jaavalla tämä johtaa usein siihen, että Memoryexception heitetään. Joissakin harvoissa tapauksissa, vuotanut luokat voivat jopa pysyä tarpeeksi kauan saada rekisteröityjä takaisinsoittoja, aiheuttaa joitakin todella outoja vikoja ja aivan liian usein heittää pahamaineinen Laitonstateexception.

auttaakseni muita minimoimaan koodianalyysiin käytetyn ajan esitän muutaman esimerkin muistivuodoista, miten ne tunnistaa Android studiossa ja mikä tärkeintä, miten ne poistetaan.

Vastuuvapauslauseke

tämän julkaisun ja sen koodiesimerkkien tarkoituksena on edistää syvempää ymmärrystä muistinhallinnasta erityisesti Javassa. Yleinen arkkitehtuuri, viestiketjujen hallinta ja käynnissä olevien HTTP-pyyntöjen käsittely eivät ole ihanteellisia tuotantoympäristöön ja toimivat vain kantajana kohta tehdään: muistin vuotoja Android on asia, joka on otettava huomioon.

kuuntelijoiden rekisteröiminen

tämän ei pitäisi oikeastaan olla ongelma, mutta aivan liian usein näen puheluita erilaisiin rekisteritapoihin, mutta niiden rekisteröimättömät vastineet eivät näy missään. Tämä on mahdollinen vuotojen lähde, koska nämä menetelmät on selvästi suunniteltu tasapainottamaan toisiaan. Kutsumatta rekisteröimätöntä menetelmää, esiintymä todennäköisesti pitää viittaus noin kauan sen jälkeen, kun viitattu objekti on lopetettu ja siten alkaa vuotaa muistia. Androidissa tämä on erityisen hankalaa, jos kyseinen objekti on toimintaa, koska niillä on usein suuri määrä dataa. Näytän, miltä se voisi näyttää.

tässä esimerkissä annamme Android Locationmanagerin ilmoittaa sijaintipäivityksistä. Tämän perustamiseen tarvitaan vain itse järjestelmäpalvelu ja takaisinkutsu päivitysten vastaanottamiseksi. Täällä toteutamme sijaintirajapinnan itse toiminnassa, mikä tarkoittaa, että Locationmanagerilla on viittaus toimintaamme. Nyt jos laitetta pyöritettäisiin, luotaisiin uusi toiminto, joka korvaisi vanhan jo paikkapäivityksiin rekisteröidyn. Koska järjestelmäpalvelu elää varmasti pidempään kuin mikään toiminta, Locationmanagerilla on edelleen viittaus edelliseen toimintaan, jolloin roskankerääjän on mahdotonta saada takaisin kyseiseen toimintaan vielä sidottuja resursseja, mikä johtaa muistin vuotamiseen. Toistuva kierto laitteen sitten aiheuttaa ei-palautettavissa toimintoja täyttää muistin, lopulta johtaa Outofmoryexception.

mutta jotta muistivuoto saadaan korjattua, se on ensin kyettävä löytämään. Onneksi Android Studio on sisäänrakennettu työkalu nimeltään Android Monitor Voimme käyttää tarkkailla muistin käyttöä muun muassa. Kaikki mitä todella tarvitsee tehdä, on avata Android näyttö ja mennä näytöt välilehti nähdä, kuinka paljon muistia käytetään ja jaetaan reaaliajassa.

Android-näyttö Androidissa studio 2.0

kaikki resurssien kohdentamista aiheuttavat vuorovaikutukset näkyvät täällä, joten se on ihanteellinen paikka seurata sovelluksen resurssien käyttöä. Löytääksemme muistivuodon meidän on tiedettävä, mitä muisti sisältää siinä vaiheessa, kun epäilemme, että muisti on vuotanut. Tässä nimenomaisessa esimerkissä, kaikki mitä meidän tarvitsee tehdä, on käynnistää sovelluksemme, kiertää laitetta kerran ja sitten vedota Dump Java Heap toiminta (muistin vieressä, kolmas kuvake vasemmalta). Tämä luo hprof-tiedoston, joka sisältää muistikuvan, kun kutsuimme toimintaa. Muutaman sekunnin kuluttua, Android Studio avaa automaattisesti Tiedoston, antaa meille siisti visuaalinen esitys muistin helppoa analysointia.

en lähde syvällisesti pohtimaan, miten suunnistaa valtavassa muistikasassa. Sen sijaan minä ohjata huomiota analysaattorin tehtäviä oikeassa yläkulmassa kuvakaappaus alla. Kaikki mitä sinun tarvitsee tehdä havaitaksesi yllä olevassa esimerkissä esitetyn muistivuodon, on tarkistaa tunnista vuodetut toiminnot ja painaa sitten play-näppäintä, jotta vuotanut toiminto näkyy analyysituloksissa.

Vastaa

Sähköpostiosoitettasi ei julkaista.