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), проблема исчезла.

Другие вопросы по тегам