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