Есть метод с кодом
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
нет ссылок и уничтожит его.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Заполняю очередь 10-ю сообщениями, начинаю их считывать 10-ю потокамиВ идеале эти 10 сообщений я и должен получить обратно, но вместо этого получаю...
Разрабатываем проект с использованием Spring bootТребуется реализовать интеграция с IP телефонией, чтобы оператор мог звонить клиенту и наоборот
В чём отличие (1) List<? extends NameClass>, перед (2) List<NameClass>?
Есть такой код, но почему то, он не срабатывает при нажатии "(" Хотя все отлично работает на цифрах, буквах, и даже если взять квадратную скобку,...