Может ли это быть сборщиком мусора?

В существующем (предположительно) рабочем коде я вижу следующую конструкцию:

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) Если они могут собирать мусор, как я могу доказать, что это действительно происходит?


person 18446744073709551615    schedule 21.01.2015    source источник
comment
Я считаю, что ответ на ваш вопрос здесь: stackoverflow.com/a/14601968/1127492   -  person Stefan    schedule 21.01.2015
comment
@Stefan: так могут ли они оба собирать мусор? (Я не понимаю, как это может следовать из этой ссылки.)   -  person 18446744073709551615    schedule 21.01.2015
comment
См. код LooperThread (в упомянутом выше ответе), как использовать обработчик в потоке. Если поток петлителя завершен, его можно выполнить сборщиком мусора, так же как и обработчик.   -  person Stefan    schedule 29.01.2015
comment
@Stefan, вы имеете в виду, что если поток петлителя не завершен явно (и он не завершается неявно), он будет ссылаться на обработчик и, следовательно, на исполняемый файл. Верно?   -  person 18446744073709551615    schedule 29.01.2015
comment
да. Поток обычно неявно завершается при завершении действия или службы.   -  person Stefan    schedule 10.02.2015