Да это утечка. Из-за того, как работают обработчики, они могут оставаться в живых в течение очень длительного периода времени и предотвращать сборку мусора для любых ресурсов, на которые они ссылаются. Вот хорошее объяснение: http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html
Если ваш runnable может пережить время жизни вашего объекта, вместо этого попробуйте подход в ответе здесь: https://stackoverflow.com/a/27825703/579234
Что вы делаете, так это добавляете еще один уровень объекта поверх обычного случая, который вызовет существующее предупреждение Lint о нестатических классах обработчиков, которое вызовет предупреждение Lint: Проверки Android:
HandlerLeak
-----------
Summary: Ensures that Handler classes do not hold on to a reference to an
outer class
Priority: 4 / 10
Severity: Warning
Category: Performance
In Android, Handler classes should be static or leaks might occur. Messages
enqueued on the application thread's MessageQueue also retain their target
Handler. If the Handler is an inner class, its outer class will be retained as
well. To avoid leaking the outer class, declare the Handler as a static nested
class with a WeakReference to its outer class.
Использование анонимного класса — это то же самое, что указано в http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9.5:
Анонимный класс всегда является внутренним классом (§8.1.3); он никогда не бывает статичным (§8.1.1, §8.5.1).
Итак, чтобы объяснить явно, ваш исполняемый файл содержит ссылку на «это», а обработчик содержит ссылку на исполняемый файл, поэтому «это» не будет собираться мусором, пока обработчик не будет мертв.
person
Sogger
schedule
07.01.2015