【问题标题】:Memory leaks on dynamically added Text View on AndroidAndroid上动态添加的文本视图内存泄漏
【发布时间】:2012-04-03 16:01:14
【问题描述】:

我有 LinearLayout,我在其中动态地添加和删除 TextView。要删除它们,我只需调用 .removeAllViews();这当然会导致巨大的内存泄漏。他们是我释放内存的任何方式还是只是我这边的架构设计缺陷。

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

}

【问题讨论】:

  • 这如何导致内存泄漏?
  • 对不起,我的错,显然是 .removeAllViews();只调度要释放的内存,不会立即释放。这就是为什么我看到内存泄漏

标签: android memory-leaks


【解决方案1】:

内存泄漏在哪里?您不需要像在 C/C++ 中那样释放内存。如果没有更多对它们的引用,GC 将收集您的 TextView。

【讨论】:

    【解决方案2】:

    不要尝试在视图组中添加文本视图。 做一个由linearlayout组成的设计,添加textview,根据他们的index删除view。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2014-08-27
      • 2023-03-25
      相关资源
      最近更新 更多