Ich habe LinearLayout, in dem ich TextView dynamisch hinzufügen und entfernen. Um sie zu entfernen, rufe ich einfach .removeAllViews(); Dies führt natürlich zu einem großen Speicherverlust. Ist es irgendeine Weise, die ich die Erinnerung freigebe oder es ist nur ein architektonischer Entwurfsfehler auf meiner Seite.Memory leckt dynamisch hinzugefügt Textansicht auf Android
public void myUpdateFunction() {
//...
((ViewGroup) findViewById(R.id.WordList)).removeAllViews();
ArrayList<String> anagrams = model.getAnagrams();
for (int i = 0; i < anagrams.size(); i++) {
String word = anagrams.get(i);
if (model.getFound(i)) {
addWord(word);
} else {
addWord(word.length());
}
}
//...
}
public void addWord(String word) {
ViewGroup list = (ViewGroup) findViewById(R.id.WordList);
TextView v = new TextView(this);
LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
v.setLayoutParams(lparams);
v.setTextColor(Color.BLACK);
v.setText(word);
list.addView(v);
}
Wie verursacht dies ein Speicherleck? –
Sorry, mein schlechtes, anscheinend .removeAllViews(); Terminiert nur den Speicher, der freigegeben werden soll, und gibt ihn nicht sofort frei. Deshalb habe ich Speicherlecks gesehen –