Wie behebe ich dieses Android-Speicherleck mit Threads?

8

Ich habe also festgestellt, dass ich mit dem MAT mehrere Threads mit jedem surfaceCreate

erstelle

Ich denke, dass ich diese Threads brauche, aber diese Methode verursacht mehrere Instanzen von ViewThread , wenn ein Benutzer durch meine App navigiert, was ein Speicherleck ist.

Wie kann ich die Art und Weise, wie meine Threads erstellt und behandelt werden, reorganisieren, so dass dies nicht geschieht oder wie kann ich das Auftreten des Lecks verhindern?

%Vor%

Ich habe fünfmal die% code% Aktivität meines Spiels geöffnet und navigiert, und das zeigt sich auf dem Career

EDIT: Ich habe seitdem festgestellt, dass je nach MAT für die Zerstörung meiner Threads unzuverlässig ist. Ich rufe nun die entsprechenden Thread-zerstörenden Aufrufe von einer anderen Methode an, ausgelöst surfaceDestroyed .

    
Houseman 03.02.2013, 22:10
quelle

3 Antworten

4

Sie sollten eine WeakReference verwenden, um die Karriere in Ihrem Thread zu referenzieren. Auf diese Weise wird die Referenz gelöscht, wenn es keine harten Hinweise mehr auf die Karriere gibt.

Sie können alle Referenzen in MAT verfolgen, indem Sie mit der rechten Maustaste auf die Karriere klicken und Path To GC Roots auswählen, dann mit allen Referenzen. Dies zeigt Ihnen den / die Pfad (e) zum Objekt im Speicher. Stellen Sie sicher, dass Sie diese Referenzen entweder löschen, wenn Sie mit der Aktivität fertig sind, oder WeakReferences verwenden, damit der GC sie automatisch löscht.

    
nickmartens1980 07.02.2013, 08:22
quelle
1

Innerhalb surfaceDestroyed , sollten Sie warten , um sicherzustellen, dass der Thread gestoppt, bevor Sie zurückkommen.

können Sie verweisen href="https://stackoverflow.com/questions/7227624/android-surfaceview-threads-and-memory-leaks"> diese Frage

%Vor%     
iTech 09.02.2013 02:28
quelle
1

Also habe ich es behoben, indem ich eine Zeile kommentiert habe:

%Vor%

Dies wurde auch mit dem WeakReference und den SurfaceDestroyed Antworten kombiniert. Ich werde es später überprüfen und feststellen, ob es nur die Beseitigung dieser eine Zeile oder eine Kombination davon und die schwache Referenz oder die andere Sache, dann vergeben die Antwort

    
Houseman 10.02.2013 06:26
quelle

Tags und Links