The playground

More information here

memóriavesztés az Androidban – azonosítsa, kezelje és elkerülje

Johan Olsson kövesse Johan Olsson kövesse Apr 13, 2016 · 9 min olvasni a mi napi törekvés az épület jobb alkalmazások, Mi a fejlesztők kell, hogy sok mindent figyelembe annak érdekében, hogy maradjon a pályán, amelyek közül az egyik, hogy győződjön meg arról, hogy a apps nem lezuhan. Az összeomlások gyakori oka a memóriaszivárgás. Ez […]
Johan Olsson
Johan Olsson

kövesse

Johan Olsson

kövesse

Apr 13, 2016 · 9 min olvasni

a mi napi törekvés az épület jobb alkalmazások, Mi a fejlesztők kell, hogy sok mindent figyelembe annak érdekében, hogy maradjon a pályán, amelyek közül az egyik, hogy győződjön meg arról, hogy a apps nem lezuhan. Az összeomlások gyakori oka a memóriaszivárgás. Ez a probléma különféle formákban nyilvánulhat meg. A legtöbb esetben folyamatosan növekszik a memóriahasználat, amíg az alkalmazás nem tud több erőforrást lefoglalni, és elkerülhetetlenül összeomlik. A Java – ban ez gyakran egy OutOfMemoryException dobását eredményezi. Néhány ritka esetben a kiszivárgott osztályok akár elég hosszú ideig is maradhatnak ahhoz, hogy regisztrált visszahívásokat kapjanak, ami nagyon furcsa hibákat okoz, és túl gyakran dobja a hírhedt IllegalStateException-t.

hogy segítsünk másoknak minimalizálni a kódelemzésre fordított időt, bemutatok néhány példát a memóriaszivárgásokra, hogyan lehet azonosítani őket az Android Studio-ban, és ami a legfontosabb, hogyan lehet eltávolítani őket.

jogi nyilatkozat

ennek a bejegyzésnek és kódpéldáinak célja a memóriakezelés mélyebb megértésének elősegítése, különösen a Java-ban. A bemutatott általános architektúra, a szálak kezelése és a futó HTTP-kérések kezelése nem ideális termelési környezetben, csupán a felvetett pont hordozójaként szolgálnak: az Android Memóriaszivárgása egy dolog, amelyet figyelembe kell venni.

regisztráció hallgatók

Ez nem igazán lehet probléma, de túl gyakran látom hívások különböző regisztrációs módszerek, de a nem regisztrált társaik sehol sem látható. Ez a szivárgások potenciális forrása, mivel ezeket a módszereket egyértelműen úgy tervezték, hogy kiegyensúlyozzák egymást. Az unregister metódus meghívása nélkül a példány valószínűleg sokáig megtartja a hivatkozást a hivatkozott objektum megszüntetése után, és így elkezd szivárogni a memória. Az Androidban ez különösen zavaró, ha ez az objektum tevékenység, mivel gyakran nagy mennyiségű adatot tárolnak. Hadd mutassam meg, hogy nézhet ki.

ebben a példában hagyjuk, hogy az Android LocationManager tájékoztasson minket a helyfrissítésekről. Mindössze annyit kell beállítanunk, hogy maga a rendszerszolgáltatás és egy visszahívás a frissítések fogadásához. Itt valósítjuk meg a hely interfészt magában a tevékenységben, ami azt jelenti, hogy a LocationManager hivatkozást fog tartani tevékenységünkre. Most, ha az eszközt elforgatnák, egy új tevékenység jön létre a helyfrissítésekhez már regisztrált régi helyett. Mivel a rendszerszolgáltatás minden bizonnyal túlél minden tevékenységet, a LocationManager továbbra is hivatkozik az előző tevékenységre, lehetetlenné téve a szemétgyűjtő számára, hogy visszaszerezze az adott tevékenységhez még mindig kapcsolódó erőforrásokat, ami a memória kiszivárgását eredményezi. Az eszköz ismételt elforgatása ezután nem helyreállítható tevékenységeket okoz a memória kitöltésében, ami végül OutOfMemoryException-hez vezet.

de ahhoz, hogy kijavítsuk a memóriaszivárgást, először meg kell találnunk. Szerencsére az Android Studio rendelkezik egy beépített eszközzel, az úgynevezett Android Monitor segítségével többek között megfigyelhetjük a memóriahasználatot. Csak annyit kell tennünk, hogy megnyitjuk az Android monitort, és megyünk a monitorok fülre, hogy lássuk, mennyi memóriát használnak és osztanak ki valós időben.

az Android Monitor az Android stúdió 2.0

Az Erőforrás-allokációt okozó kölcsönhatások itt tükröződnek, így ideális hely az alkalmazás erőforrás-felhasználásának nyomon követésére. Annak érdekében, hogy megtaláljuk a memóriaszivárgásunkat, tudnunk kell, hogy mit tartalmaz a memória egy olyan időpontban, amikor gyanítjuk, hogy a memória kiszivárgott. Ehhez a konkrét példához csak annyit kell tennünk, hogy elindítjuk az alkalmazást, egyszer elforgatjuk az eszközt, majd meghívjuk a Dump Java Heap műveletet (a memória mellett a bal oldali harmadik ikon). Ez létrehoz egy hprof fájlt, amely egy memória pillanatképet tartalmaz a művelet meghívásakor. Néhány másodperc múlva az Android Studio automatikusan megnyitja a fájlt, így a memória tiszta vizuális ábrázolása az egyszerű elemzés érdekében.

nem fogok mélyebbre menni arról, hogyan kell navigálni a hatalmas memória halomban. Ehelyett az alábbi képernyőkép jobb felső sarkában lévő analizátor feladatokra irányítom a figyelmét. A fenti példában bemutatott memóriaszivárgás észleléséhez csak annyit kell tennie, hogy ellenőrizze a kiszivárgott tevékenységek észlelését, majd nyomja meg a play gombot, hogy a kiszivárgott tevékenység megjelenjen az elemzési eredmények alatt.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.