Foto af Bogomil Mihaylov på UnsplashBroadcast-modtagere
Broadcast-modtagere kan bruges til at lytte til systemdækkende broadcast-hændelser eller hensigter, der angiver oplysninger om enheden, f.eks. lavt batteri, dato og ændringer i forbindelsesmuligheder – f.eks. at flytilstand er blevet slået fra. Når vi bruger dem, skal vi huske at afregistrere broadcast-modtagere, da vi ellers uundgåeligt vil beholde en reference til aktiviteten.
Sådan undgår du det: Det eneste du skal gøre er at kalde unregister()
på din broadcast-modtager i onStop()
i din aktivitet.
Dette mønster findes også for asyncTask, TimerTask og tråde, som skal annulleres i onDestroy()
for at undgå en lækage.
Kontekst til Singleton-klasse
I nogle tilfælde har vi brug for at videregive kontekst fra en aktivitet til en Singleton-klasse. Et eksempel på dette ville være en utils-klasse, hvor vi har brug for at få adgang til ressourcer, tjenester eller interne filer. Overførsel af kontekst betyder imidlertid, at vi uundgåeligt holder fast i en reference til aktiviteten.
Sådan undgår du det: I stedet for at videregive this
fra en aktivitet kan vi videregive applikationskontekst, hvis den er tilgængelig (hvis du vil lære mere om, hvornår du skal bruge hvilken kontekst, fandt jeg denne artikel meget nyttig!). En alternativ løsning er at sikre, at vi indstiller Singleton-konteksten til null inde i aktiviteten onDestroy()
-metoden.
Statiske referencer
Referencer til en visning eller en aktivitet som statisk betyder, at referencen til aktiviteten ikke bliver skraldet. Dette bør simpelthen undgås til enhver tid.
Sådan undgår du det: Hvis du af en eller anden grund er nødt til at gøre det, kan du sikre, at den bliver destrueret ved at sætte den til null i onDestroy().
Innerklassereferencer
Innerklasser forårsager ofte lækager ved at holde en implicit reference til den ydre klasse. Dette sker, hvis klassevariablen er erklæret som statisk, eller hvis selve klassen ikke er erklæret som statisk. Forvirrende? Ja, men det er nemt at undgå, hvis vi følger den enkle regel nedenfor.
Sådan undgår du det: Gør den indre klasse statisk for at undgå at have en reference til den ydre klasse, og opret aldrig en statisk variabel for en indre klasse. Det samme gælder for anonyme klasser.
Det er det hele! Håber du har lært nogle ting om hukommelseslækager, og hvordan man undgår dem. God kodning! 😄
Her er en række artikler og dokumentation, som jeg fandt særligt nyttige, da jeg lærte om hukommelseslækager: