Я создаю экземпляр своего обработчика для потока пользовательского интерфейса в одном из методов onCreate () моей Activity. (Чтобы избежать риска утечки памяти, Handler не является внутренним классом, это обычный класс.)
Поскольку один обработчик соответствует одному потоку, но один поток может иметь больше обработчиков (насколько я понимаю), каждый вызов onCreate () создает экземпляр нового обработчика. Поэтому, если моя деятельность будет воссоздана снова (после onDestroy, но без какого-либо уничтожения процесса), onCreate () добавит еще один обработчик, а старый не будет удален. (В исходном коде Android обработчик запрашивает только Thread's Looper и получает ссылку на свою очередь сообщений.)
Какое оптимальное решение? Должен ли я создать экземпляр Handler для статической переменной, а затем в onCreate () я могу проверить, является ли он нулевым или нет. Если он не равен нулю, тогда нет необходимости создавать новый экземпляр, верно?
(Излишне говорить, что в onDestroy () я установил ссылку Activity в моем экземпляре Handler на NULL, поэтому Handler не пропускает Activity или что-либо подобное, а метод обработки моего обработчика проверяет, является ли он нулевым, и при необходимости отбрасывает сообщения . Но мой вопрос в том, что обработчик по-прежнему сохраняется для потока по причинам, подробно описанным в предыдущих абзацах, я полагаю, поэтому чем больше вызовов onCreate, тем больше экземпляров Handler прикреплено к потоку пользовательского интерфейса. Правильно ли мое статическое решение для этого? это не критично, тогда как Android определяет, что обработчик, связанный с текущим потоком, должен быть GC-d?)