Я прочитал статью "Избегайте утечек памяти" из здесь.
Однако предлагаемое решение не решает проблему утечки. Я тестировал это с помощью эмулятора Android в Windows XP (SDK 2.3.1). Я сбросил кучу и проверил, что основное действие все еще находится в куче (я использовал MAT)
Вот что я сделал:
- создайте приложение HelloWorld с помощью HelloWorldActivity (у него нет дочерних представлений)
- запустите эмулятор и запустите приложение HelloWorld.
- закройте его, нажав кнопку "Назад".
- Причина gc в DDMS и кучи дампа < - Здесь я нашел экземпляр HelloWorldActivity.
- "Путь к GC Roots" из него показывает следующий путь.
HelloWorldActivity < - PhoneWindow $DecorView < - InputMethodManager
InputMethodManager - это однотонный и три ссылки на DecorView, который ссылается на HelloWorldActivity.
Я не могу понять, почему InputMethodManager по-прежнему ссылается на экземпляр DecorView даже после уничтожения активности.
Есть ли способ убедиться, что основное действие будет уничтожено и GC-возможно после его закрытия?