2016-02-11 13 views
7

Ich beginne einen Dienst => Hintergrund-Service, und eine Überprüfung für Dateien in "neuen Thread", im Log bekomme ich Folgendes, der Service/App wird angehalten.Getting I/Art: Explizite gleichzeitige Mark Sweep GC befreit

Log: I/art: Explicit concurrent mark sweep GC freed 25935(1686KB) AllocSpace objects, 13(903KB) LOS objects, 39% free, 13MB/22MB, paused 649us total 43.569ms

Es ist nur eine Suche nach Dateien in MyData in SDcard, die eine Reihe von Bildern enthalten (etwa 20 Bilder).

** Scan = Abrufen der Pics-Namen und Speichern in String.

Antwort

15

All dies bedeutet, dass der Garbage Collector seine Arbeit erledigt und Speicher freigibt.

Wenn Sie dies häufig (oder konsistent) sehen, werden wahrscheinlich zu viele Objekte zugewiesen. Eine häufige Ursache ist die Zuteilung der viele (oder wenige große) Objekte in einer Schleife wie folgt:

for (int i = 0; i < 100; i++) { 
    Bitmap bmp = Bitmap.create(100, 100, Bitmap.Config.ARGB_4444); 
} 

Jedes Mal, wenn wir diese Schleife getroffen, wir hundert neue Bitmap-Objekte zuordnen.

Der beste Weg, GC-Sweeps zu verhindern, besteht darin, keine Objekte zuzuweisen. Natürlich müssen Sie Objekte in Java zuordnen, daher müssen Sie sicherstellen, dass Sie nicht unnötig allozieren.

Here is one of many YouTube videos, die Google veröffentlicht hat, mit Tipps zur Vermeidung von GC-Ereignissen und zur ordnungsgemäßen Verwaltung des Speichers.

+1

Ich habe dieses Problem mit einer App, die 30 Mal in Folge funktioniert und nichts im Code geändert wird Ich bekomme nur einen grauen Bildschirm und es macht dies für eine Ewigkeit. Android Studio ist'crap – ObedMarsh

+0

Android Studio ist eine IDE, es hat nichts mit dem Code auf Ihrem Gerät zu tun. Es klingt, als hättest du eine Schleife, die unendlich läuft. –

+0

Der Code funktioniert gut, wenn ich einen neuen Emulator erstelle und dann beginne, wenn nach einiger Zeit keine Schleifen im Code sind. Es ist eine grundlegende Notiz-App, die sqllite verwendet, es gibt 3 Notizen in der Datenbank atm. Es scheint zu passieren, wenn ich aus irgendeinem Grund versuche, über einen Cursor zu iterieren. – ObedMarsh

Verwandte Themen