Cum să remediați scurgerile de memorie în aplicația Android

Dacă aplicația dvs. este lentă pe unele dispozitive sau funcțiile de execuție instantanee din Android Studio nu mai funcționează aleatoriu, atunci s-ar putea să vă confruntați cu scurgeri de memorie.

Când are loc o scurgere de memorie?

Unul dintre lucrurile minunate din Java este colectorul de gunoi (GC). Un garbage collector rulează periodic pentru a verifica obiectele care nu sunt utilizate și le elimină. O scurgere de memorie se va întâmpla atunci când există obiecte care nu sunt utilizate de către aplicație, dar colectorul de gunoi nu le poate recunoaște. Prin urmare, acestea vor rămâne în memorie nefolosite, reducând cantitatea de memorie disponibilă pentru aplicație, ceea ce provoacă rezultate neașteptate.

Cum să detectați scurgerile de memorie?

Există mai multe modalități de a face acest lucru. Vom aborda câteva dintre ele în acest articol.

Dar mai întâi, să scriem un cod care ar putea produce o scurgere de memorie. Vom crea o aplicație cu două activități. Activitatea A va avea un buton care va deschide activitatea B. Alături de aceasta, vom crea și o clasă singleton care deține o referință statică a unui Context.

class Manager {
private static Manager ourInstance;

private Context context;

static Manager getInstance(Context context) {
if (ourInstance == null) {
ourInstance = new Manager(context);
}
return ourInstance;
}
}

private Manager(Context context) {
this.context = context;
}}
}

Vom apela acest singleton din activitatea A

Manager.getInstance(this);

Detectarea scurgerilor de memorie cu ajutorul monitoarelor din Android Studio

Scurgeri de memorie android

Android Studio oferă instrumente practice pentru profilarea performanței aplicației dumneavoastră, iar unul dintre ele este Monitorul de memorie. Putem utiliza Memory Monitor pentru a detecta scurgerile de memorie prin următorii pași:

1. Rulați aplicația dvs. pe dispozitivul mobil sau pe un emulator.

2. Deschideți Android Monitor (apăsați Cmd + 6 în Mac sau Alt + 6 în Windows). În partea de sus a Memory Monitor, faceți clic pe Start Allocation Tracking.

3. Folosiți aplicația în jurul părții pe care o suspectați că s-ar putea confrunta cu o scurgere de memorie. În exemplul nostru, vom merge la o altă activitate.

4. Faceți clic pe Initiate GC (Inițiați GC) pentru a forța garbage collector-ul să înceapă să colecteze obiectele care nu sunt utilizate în prezent și să le elimine. Ar trebui să vedeți că graficul de memorie scade puțin.

5. Faceți clic pe Dump Java Heap pentru a lăsa Android Studio să genereze un fișier .hprof care conține un instantaneu al heap-ului. Cel mai simplu mod de a verifica o scurgere de memorie este folosind Analyzer Tasks

6. Deschideți fila Analyzer Tasks și apoi faceți clic pe Run în partea de sus a acestei file. Ar trebui să vedeți activitățile cu scurgeri de memorie în fila Analysis Results de sub fila Analyzer Tasks.

scurgeri de memorie android

Detectarea scurgerilor de memorie folosind Leak Canary

Leak Canary este o bibliotecă realizată de Square și este o modalitate foarte rapidă de a detecta scurgerile de memorie. Leak Canary vă permite să detectați scurgeri de memorie în execuții mai lungi, deoarece nu trebuie să conectați dispozitivul la Android Studio și să vă monitorizați aplicația pentru o perioadă lungă de timp. Leak Canary vă va trimite notificări ori de câte ori există o scurgere de memorie.

Integrarea lui Leak Canary este foarte ușoară. Tot ce trebuie să faceți este să adăugați următoarele la fișierul build.gradle la nivelul aplicației dvs.:

dependencies {
debugCompile ‘com.squareup.leakcanary:leakcanary-android:1.5.1’
releaseCompile ‘com.squareup.leakcanary:leakcanary-android-no-op:1.5.1’
testCompile ‘com.squareup.leakcanary:leakcanary-android-no-op:1.5.1’
}

Apoi adăugați următorul cod în clasa Aplicație:

@Override public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
// Acest proces este dedicat lui LeakCanary pentru analiza heap.
// Nu ar trebui să vă inițializați aplicația în acest proces.
return;
}
LeakCanary.install(this);
// Cod normal de inițiere a aplicației…
}

Și asta e tot, sunteți gata de utilizare.

Detectarea posibilelor scurgeri cu Infer

Infer este un instrument de analiză statică realizat de Facebook care vă ajută să găsiți posibile excepții de pointer nul și scurgeri de resurse, precum și accesibilitatea adnotărilor, protecții de blocare lipsă și condiții de concurență. Este un instrument bun de adăugat la CI-ul dvs. pentru a depăși toate bug-urile posibile. Este, de asemenea, open source, astfel încât dezvoltarea instrumentului este încă în evoluție. Puteți găsi mai multe informații despre Infer în documentația lor Quick Start.

.

Lasă un comentariu