Есть метод с кодом
SomeActivity.runOnUiThread(new Runnable()
{
public void run()
{
........
}
});
Не ясно следующее: что происходит с объектом класса Runnable(), который создаётся в new. Точнее, когда он удаляется, и удаляется ли вообще до завершения приложения? Если это описано в документации, просьба дать ссылку. Я не смог найти.
В Java объекты удаляются сборщиком мусора, если на них никто не ссылается. Разберёмся кто и когда ссылается на ваш Runnable.
Внутри потока пользовательского интерфейса крутится Looper. Грубо говоря, это бесконечный цикл, на каждой итерации достающий и обрабатывающий сообщения из MessageQueue. Когда ваш поток вызывает метод runOnUiThread, переданный в этот метод Runnable добавляется в очередь. Пока Runnable находится в очереди, она хранит на него ссылку. В какой-то момент, Looper извлекает Runnable из очереди и сохраняет в локальной переменной. Теперь Looper хранит ссылку на Runnable. Looper вызывает метод run и ждёт его завершения. После завершения этого метода, Looper начнёт новую итерацию, уничтожив все локальные переменные, в том числе ссылку на Runnable. При следующем запуске сборщик мусора обнаружит, что на этот Runnable нет ссылок и уничтожит его.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей