Ich versuche, einige Ansichten aus dem Speicher zu löschen.Wie löscht man eine dynamisch erstellte Ansicht aus dem Speicher?
Hier ist die Situation. ich eine Aktivität haben, dass ich es A und ein anderes B.
Jetzt drücke ich einen Knopf in Aktivität A, die mit Aktivität B aufruft, die eine Menge von Ansichten dynamisch Danach erzeugt rufen werde, drücke ich Taste, um zurückzukehren Aktivität A Wiederholen Sie diese Schritte oft.
Das Ergebnis ist, in DDMS, die Anzahl der Objekte und Speicher zugeordnete Stills wächst (die Anzahl der Objekte wird um 88 erhöht und von 0,002MB zugeteilt) Das bedeutet, dass die Ansichten nicht aus dem Speicher entfernt werden!
Wie kann ich die Ansichten vollständig aus dem Speicher löschen?
Thx!
Update- Hier können Sie einige neue Informationen
Grundsätzlich auf meiner „realen Welt“ gehen Ich habe nur eine Aktivität, die eine Menge Zeit erstellt wird. Dies geschieht, weil ich mit einem Webservice kommunizieren muss und alle Antworten in dieser neuen Instanz dieser Aktivität erstellt werden.
Ich habe versucht, dieses Problem mit dem Code unten
@Override
protected void onDestroy() {
super.onDestroy();
nullViewDrawablesRecursive(mRootView);
mRootView = null;
System.gc();
}
und das ist mein nullViewDrawablesRecursive
private void nullViewDrawablesRecursive(View view) {
if (view != null) {
try {
ViewGroup viewGroup = (ViewGroup) view;
int childCount = viewGroup.getChildCount();
for (int index = 0; index < childCount; index++) {
View child = viewGroup.getChildAt(index);
nullViewDrawablesRecursive(child);
}
} catch (Exception e) {
}
nullViewDrawable(view);
}
}
zu lösen Und das ist mein nullViewDrawable
private void nullViewDrawable(View view) {
try {
view.setBackgroundDrawable(null);
} catch (Exception e) {
}
try {
ImageView imageView = (ImageView) view;
imageView.setImageDrawable(null);
imageView.setBackgroundDrawable(null);
} catch (Exception e) {
}
}
Grundsätzlich versuche ich Entfernen Sie alle Ansichten und untergeordneten Elemente von ihrem übergeordneten Element (mRootView), bevor Sie die activi löschen ty. Es funktioniert ziemlich gut, wenn ich das nicht mache, nehmen die Objekte und die Speichernutzung immer mehr zu.
Der Punkt ist, es ist nicht perfekt, anscheinend wird eine Art von Ansichten nicht zerstört. Und ich denke, ich erfinde das Rad neu, es scheint verdammt schwer für eine einfache Sache!
Nochmals vielen Dank für den Versuch, mir zu helfen!
war nicht "mRootView = null;" genug?Oder mussten Sie die Zeichen rekursiv aufheben? – usman
Sie müssen kein Objekt durch try-catch-Block werfen. Alles, was Sie tun müssen, ist, den Typ wie folgt zu überprüfen: if (Objektinstanz der Klasse) {Class class = (Class) object; } –