InputConnectionWrapper не завершена и вызывает утечку памяти в Android
В определенных ситуациях я создаю EditText, передаю значение другому фрагменту, а затем вызываю removeAllViews в ViewGroup, которой принадлежит EditText, для удаления EditText.
Проблема состоит в том, что InputConnectionWrapper, связанный с EditText, все еще занимает память.
В приведенном выше дампе кучи InputConnectionWrapper выделяется более 300 и занимает значительную память.
Однако с включенным дампом кучи в Activity есть только один EditText, и считается, что InputConnectionWrapper не создан из-за соответствующего EditText.
Чтобы закрыть InputConnectionWrapper, я попробовал следующую функцию.
TextKeyListener.clear(editText.getText());
editText.setHint(null);
editText.removeTextChangedListener(this);
editText=null;
// The ViewGroup will then execute removeAllViews.
Тем не менее, InputConnectionWrapper, кажется, выделяется больше с течением времени, так как он не завершен.
По какой причине InputConnectionWrapper не будет завершен?
1 ответ
Я столкнулся с той же проблемой, обнаруженной через LeakCanary, которая дала мне цепочку InputConnectionWrapper, обертывающую EditText.
Похоже, что это ошибка в коде Android, которая была исправлена в Marshmallow. Когда я обновил минимальную версию API с 21 (Lollipop) до 23 (Marshmallow), проблема исчезла.