У меня есть ListView
и это adapter
«s getView
метод, я возвращаю RelativeLayout
с MyButton
внутри него.Android TextView протечек с setMovementMethod
MyButton
имеет textView
, и внутри него есть слова, которые можно щелкнуть (ClickableSpan
).
Чтобы сделать эту работу, я начинаю с таял следующую строку: textView.setMovementMethod(LinkMovementMethod.getInstance());
Все работает отлично, но MAT показывает, что MyButton
утечек из-за textView
. Когда я прокомментирую вышеприведенную строку, ничего не течет.
Должен ли я установить movementMethod
на null
? Но даже если это так, я не могу знать момент уничтожения кнопки, чтобы установить это на null
, поскольку он находится внутри многих других видов.
Что я делаю неправильно? Как предотвратить эту утечку?
обновление
решаемые утечку, установив текст в пустую строку внутри onDetachedFromWindow
, но я все еще пытаюсь найти документацию, связанную с этим поведением. Почему я должен установить textview
на ""
?
try View.onDetachedFromWindow() – pskink
@pskink Спасибо, установка 'motionMethod' на' null' не работало, но установка текста в '' '' работала. (в onDetachedFromWindow). Если вы также знаете причину этой утечки, отправьте сообщение в качестве ответа, чтобы я мог отметить ее как принятый ответ. Мне все еще интересно, почему происходит эта утечка. Нет документации, связанной с этим поведением. – frankish
Я использовал [LeakCanary] (https://github.com/square/leakcanary) для отслеживания утечки памяти и в конечном итоге нашел, что «TextView.setMovementMethod()» был виновником. К сожалению, для меня установка метода перемещения в нуль, а текст в «onDetachedFromWindow()» не решил проблему. LeakCanary показывает, что он имеет какое-то отношение к 'ViewTreeObserver', не имеющему очиститель preDraw. Учитывая, что 'TextView' реализует' OnPreDrawListener', мне интересно, что это делает что-то фанки под капотом? –