В существующем (предположительно) рабочем коде я вижу следующую конструкцию:
void someFunc() {
some_irrelevant_code();
new Runnable() {
Handler handler = new Handler();
@Override
public void run()
{
//will run each 5 seconds
doSomething();
if (!needStopSomeThread)
{
handler.postDelayed(this, 5000);
}
}
}.run();
}
Интересно, могут ли Runnable и Handler собирать мусор в произвольный момент? Похоже, что только runnable ссылается на обработчик, и только обработчик ссылается на runnable, поэтому они оба могут быть удалены сборщиком мусора, если только Android не имеет структуры данных, ссылающейся на один из них, например. обработчик.
1) Могут ли они оба (обработчик и исполняемый файл) собирать мусор?
2) Если они могут собирать мусор, как я могу доказать, что это действительно происходит?