Überprüfen und Vermeiden von Speicherlecks in der Anwendung

So, ich bin fertig mit einem Projekt, nun ist die wichtigste Frage, die ich bin mit der Speicher Leckage in der Anwendung ("leak" heißt, Sie halten eine Referenz zu einer Aktivität, so dass die GC aus Sammlung)

Einige der Fälle, die ich gefunden, wo der Speicher Leckage Auftritt, sind:

Kontext Leckage

Es tritt auf, weil der lange gelebt Verweis auf die Aktivität Kontext.

Ein sehr gutes Beispiel dafür fand ich hier,

private static Drawable sBackground;

@Override
protected void onCreate(Bundle state) {
  super.onCreate(state);

  TextView label = new TextView(this);
  label.setText("Leaks are bad");

  if (sBackground == null) {
    sBackground = getDrawable(R.drawable.large_bitmap);
  }
  label.setBackgroundDrawable(sBackground);

  setContentView(label);
}

hier ist das problem mit private static Drawable sBackground; Die statische Drawable erstellt mit der Tätigkeit als Kontext, so in diesem Fall, es gibt einen statischen Verweis auf ein Drawable, die sich auf die Aktivität, und das ist, warum es ist ein Leck. Solange dieser Verweis vorhanden ist, die Aktivitäten werden im Speicher gehalten, undicht alle seine Ansichten.

Bildschirm Orientierung ändern

Zweiten Fall zieht die Aufmerksamkeit wird, wenn die änderungen der Bildschirmausrichtung. Wenn die Bildschirmausrichtung ändert das system wird standardmäßig zerstören die derzeitige Tätigkeit und eine neue erstellen, wobei deren Zustand. Dabei wird Android neu laden der Anwendungen der Benutzeroberfläche aus den Ressourcen. Jetzt stellen Sie sich vor, ein Programm geschrieben, mit einem großen bitmap, die Sie nicht wollen, laden auf jeder Drehung.

Dadurch wird viel Speicher Leckage, wie es sein könnte, große bitmaps zu laden.

Kontext-Aktivität

Den Dritten Fall, ich fand, war der Verweis auf die Aktivität Kontext. Es führt auch zu Speicherlecks.

Ich Frage mich, ob es einen einfachen Weg, um zu vermeiden, dass solche Speicher undicht
passiert. oder wenn es sein könnte, tool zum überprüfen und entfernen Sie diese
Speicher-Leckagen aus der Anwendung.

Schreibe einen Kommentar