#android #multithreading #memory-leaks #handler #android-handler
#Android #многопоточности #утечки памяти #обработчик #android-обработчика
Вопрос:
Нестатический внутренний Handler
класс в Android Studio показывает предупреждение об утечке памяти. Существует множество существующих тем, которые охватывают этот вопрос и причину этого предупреждения.
Однако мне явно интересно о подчеркнутом предложении:
Это неверно, не так ли? Когда Handler
он связан с не-пользовательским thread
интерфейсом, но у него есть ссылка на действие, я все еще пропускаю действие.
Комментарии:
1. Независимо от того, какой поток внутренний класс захватывает окружающий класс и не может быть создан без экземпляра внешнего класса. Единственная причина подчеркнутого текста, возможно, в том, что с обработчиком потоков цикл может быть завершен, что означает, что это может быть не постоянная утечка памяти, а впоследствии сбор мусора, где, поскольку основной цикл никогда не завершается в течение всего срока службы приложения.
2. @MarkKeen Очень хороший момент, спасибо.
3. @MarkKeen Если обработчик является нестатическим внутренним классом самого класса Thread, утечки памяти не должно быть, верно?
4. Это зависит от того, является
Thread
ли сам класс верхнего уровня? Если время жизниHandler
совпадаетThread
, то нет. Просто будьте осторожны с областью действияHandler
ссылки — сильные ссылки наHandler
будутThread
препятствовать сборке мусора. Опять же, это зависит от времени жизни объектов, содержащих ссылку..5. Если оба
Thread
иHandler
недоступны для каких-либо других сильных ссылок, тогда нет, все в порядке.