2012-04-03 14 views
0

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); 

} 
+1

Wie verursacht dies ein Speicherleck? –

+0

Sorry, mein schlechtes, anscheinend .removeAllViews(); Terminiert nur den Speicher, der freigegeben werden soll, und gibt ihn nicht sofort frei. Deshalb habe ich Speicherlecks gesehen –

Antwort

1

Wo ist das Speicherleck? Sie müssen Speicher nicht freigeben, wie Sie in C/C++ tun mussten. Der GC sammelt Ihre TextViews, wenn keine Referenzen mehr auf sie vorhanden sind.

0

versuchen Sie nicht, Textview in Viewgroup hinzuzufügen. Erstellen Sie ein Design, das aus linearem Layout besteht, fügen Sie die Textansicht hinzu und löschen Sie die Ansicht entsprechend ihrem Index.