Основное действие не является сборщиком мусора после уничтожения, поскольку на него косвенно ссылается InputMethodManager

Я следил за статьей «Как избежать утечек памяти» из здесь .

Однако предлагаемое решение не решает проблему утечки. Я тестировал это с помощью эмулятора Android в Windows XP (SDK 2.3.1). Я сбросил кучу и проверил, что основная активность все еще находится в куче (я использовал MAT)

Вот что я сделал:

  1. создать приложение HelloWorld с HelloWorldActivity (у него нет дочерних представлений)
  2. запустить эмулятор и запустить приложение HelloWorld.
  3. закрыть его, нажав клавишу возврата.
  4. Вызов gc в DDMS и дамп кучи
  5. «Путь к корням сборщика мусора» показывает следующий путь:

HelloWorldActivity

InputMethodManager - это одноэлемент и три ссылки на DecorView, которые ссылаются на HelloWorldActivity.

Я не могу понять, почему InputMethodManager по-прежнему ссылается на экземпляр DecorView даже после уничтожения действия.

Есть ли способ убедиться, что основное действие уничтожено и поддерживает сборку мусора после его закрытия?

34
задан Suragch 20 July 2017 в 05:37
поделиться