我有一个ListView,它的适配器中的getView方法返回一个RelativeLayout,里面包含了MyButton。
MyButton有一个textView,我在其中放置了可点击的单词(ClickableSpan)。
为了使这个工作起来,我从以下一行开始: textView.setMovementMethod(LinkMovementMethod.getInstance());
一切都可以正常工作,但MAT显示MyButton泄漏,因为textView。当我注释掉上面的那一行时,就没有泄漏了。
我应该将movementMethod设置为null吗?但即使如此,我也无法知道按钮销毁的时刻,以便将其设置为null,因为它在许多其他视图内部。
我做错了什么?如何预防这种泄漏?
更新:
通过在onDetachedFromWindow中将文本设置为空字符串解决了泄漏问题,但我仍在尝试找到与此行为相关的文档。为什么我要将textview设置为空字符串?
MyButton有一个textView,我在其中放置了可点击的单词(ClickableSpan)。
为了使这个工作起来,我从以下一行开始: textView.setMovementMethod(LinkMovementMethod.getInstance());
一切都可以正常工作,但MAT显示MyButton泄漏,因为textView。当我注释掉上面的那一行时,就没有泄漏了。
我应该将movementMethod设置为null吗?但即使如此,我也无法知道按钮销毁的时刻,以便将其设置为null,因为它在许多其他视图内部。
我做错了什么?如何预防这种泄漏?
更新:
通过在onDetachedFromWindow中将文本设置为空字符串解决了泄漏问题,但我仍在尝试找到与此行为相关的文档。为什么我要将textview设置为空字符串?
movementMethod
设置为null
没有起作用,但将文本设置为""
确实起了作用(在 onDetachedFromWindow 中)。如果您也知道这个泄漏的原因,请发布一个答案,这样我就可以将其标记为已接受的答案。我仍然很好奇为什么会发生这种泄漏,没有与此行为相关的文档。 - frankishTextView.setMovementMethod()
是罪魁祸首。不幸的是,将移动方法设置为null并在onDetachedFromWindow()
中将文本设置为""并没有解决问题。LeakCanary显示它与ViewTreeObserver
没有清除preDraw监听器有关。考虑到TextView
实现了OnPreDrawListener
,我想知道它是否在底层执行了某些奇怪的操作? - Chris Horner