0

在某些情况下,我创建一个EditText,将值传递给另一个Fragment,然后在EditText所属的ViewGroup上调用removeAllViews来删除EditText。

问题是与 EditText 关联的 InputConnectionWrapper 仍在占用内存。

在此处输入图像描述

在上面的 Heap Dump 中,InputConnectionWrapper 分配了 300 多个,并且占用了相当多的内存。

但是开启Heap Dump后,Activity中只有一个EditText,由于对应的EditText,判断InputConnectionWrapper没有创建。

要关闭 InputConnectionWrapper,我尝试了以下功能。

    TextKeyListener.clear(editText.getText());
    editText.setHint(null);
    editText.removeTextChangedListener(this);
    editText=null;
    // The ViewGroup will then execute removeAllViews.

但是, InputConnectionWrapper 似乎随着时间的推移分配得更多,因为它尚未最终确定。

InputConnectionWrapper 不会最终确定的原因是什么?

4

1 回答 1

0

我遇到了通过 LeakCanary 发现的相同问题,给了我一个 InputConnectionWrapper'd 包装一个 EditText 链。

看起来这是在 Marshmallow 中修复的 Android 代码中的错误。当我将我的最小 API 版本从 21(棒棒糖)升级到 23(棉花糖)时,问题就消失了。

于 2018-06-20T01:32:44.757 回答