Внутри моего класса у меня есть следующий код:
mHandler = createHandler();
private Handler createHandler() {
return new Handler() {
public void handleMessage (Message msg) {
update();
if (!paused) {
sendEmptyMessageDelayed(0, 300);
}
}
};
}
В документации написано:
http://developer.android.com/reference/android/os/Handler.html
Каждый экземпляр Handler связан с одним потоком, а очередь сообщений потока
Итак, если я правильно понял, обработчик не собирает мусор, пока работает поток приложений, это правильно?
В моем конкретном примере, поскольку Handler является анонимным внутренним классом, он имеет неявную ссылку на охватывающий Object и всю иерархию объектов, которые указаны им. Это выглядит как рецепт утечки памяти.
Btw, я могу заставить обработчика прекратить отправку сообщений (почему у меня есть if (!paused)
), но это не сделает его GCed, правильно?
Итак, есть способ удалить обработчик из очереди сообщений и заставить его быть GCed?