今天在使用LeakCanary检查应用的内存泄露时,报了一个这样的错误,并且还给出了参考链接,原来这是Android输入法的一个bug,在SDK_INT < KITKAT || SDK_INT > 23中都存在。
LeakCanary之所以能够显示参考链接是因为它有一个针对SDK已知内存泄露的列表,放在 AndroidExcludedRefs.java中,比如输入法的这个。
这个问题很多人都遇到过,网上已经有比较成熟的方案,分析原因比较透彻的是这篇文章:[Android][Memory Leak] InputMethodManager内存泄露现象及解决,改善方案可以参考Leaknary给出的方案:InputMethodManager内存泄露修正方案,在自定义的Application的onCreate方法调用fixFocusedViewLeak方法即可解决。
解决方案源码:https://gist.github.com/pyricau/4df64341cc978a7de414#file-immleaks-java-L137
注意:1.SDK_INT < KITKAT || SDK_INT > 23;2.在合适的地方调用fixFocusedViewLeak方法.可以在Application或者Activity的onCreate方法调用
转载地址:https://zhuanlan.zhihu.com/p/20828861