Как очистить динамически созданное представление из памяти?

Я пытаюсь очистить память от некоторых представлений.

Ситуация такая. У меня есть действие, которое я назову А, а другое Б.

Теперь я нажимаю кнопку в действии А, которое вызывает действие Б, которое динамически создает множество представлений. После этого я нажимаю кнопку «Назад», чтобы вернуться к действию A. Повторите тезисы 2 шага много раз.

В результате в DDMS количество объектов и выделенной памяти растет (количество объектов увеличивается на 88 и выделено на 0,002 МБ). Это означает, что представления не удаляются из памяти!

Как мне ПОЛНОСТЬЮ очистить память от представлений?

Спасибо!

Обновление- Вот вам новая информация.

По сути, в моем «реальном мире» у меня есть только одно действие, которое создается много раз. Это происходит потому, что мне нужно связаться с веб-службой, и все ответы создаются в этом новом экземпляре этого действия.

Я попытался решить эту проблему с помощью приведенного ниже кода

@Override
protected void onDestroy() {
    super.onDestroy();      
    nullViewDrawablesRecursive(mRootView);
    mRootView = null;
    System.gc();
}

и это мой 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);
    }
}

И это мой 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) {
    }
}

По сути, я пытаюсь удалить все представления и дочерние элементы из их родителя (mRootView) перед уничтожением активности. Это работает довольно хорошо, если я этого не сделаю, объекты и использование памяти будут увеличиваться все больше и больше.

Дело в том, что это не идеально, по-видимому, некоторые типы представлений не уничтожаются. И я думаю, что я «изобретаю велосипед», это кажется чертовски сложным для простой вещи!

Еще раз большое спасибо за попытку мне помочь!

6
задан digulino 2 April 2012 в 19:05
поделиться