Как Looper связывается с потоком

«Как Looper связывается с потоком» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Looper привязывается к потоку через ThreadLocal, который хранит экземпляр Looper'а для текущего потока.

  1. Создание Looper'а:
    Looper.prepare() // Создает Looper для текущего потока
    Looper.loop()   // Запускает обработку сообщений
  1. Привязка к потоку:

    • prepare() сохраняет Looper в ThreadLocal<Looper>.
    • myLooper() возвращает Looper текущего потока.
  2. Пример HandlerThread:
    val handlerThread = HandlerThread("MyThread")
    handlerThread.start()
    val handler = Handler(handlerThread.looper)

Looper остается привязанным к потоку до вызова quit() или quitSafely().