2012-04-03 43 views
0

TextViewをdinamically追加して削除するLinearLayoutがあります。それらを削除するには、私はちょうど を呼び出します.removeAllViews();このオフコースは、大きなメモリリークを引き起こします。彼らの記憶を放棄するのは私のやり方なのか、それとも私の側の建築設計上の欠陥なのですか?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

これはどのようにしてメモリリークを引き起こしますか? –

+0

申し訳ありませんが、私の悪い、明らかに.removeAllViews();リリースされる予定のメモリのみをスケジュールし、すぐに解放しません。それが私がメモリリークを見ている理由です –

答えて

1

どこがメモリリークですか? C/C++で行う必要がないので、メモリを解放する必要はありません。より多くの参照がない場合、GCはTextViewを収集します。

0

viewgroupにtextviewを追加しようとしないでください。 デザインを直線レイアウトで構成し、そのインデックスに従ってtextviewとdeleteビューを追加します。

関連する問題