Приложения в Android запускаются в виртуальной машине, использующей Java Runtime. В Java вся работа выполняется в потоках. Поток заканчивает работу, когда отрабатывает метод run(). В Android главный (UI) поток не всегда занят выполнением какой-либо задачи и часто находится в ожидании действий пользователя или событий системы. Для реализации такого поведения в Android используются три сущности, которые работают вместе: Looper, MessageQueue и Handler.

Looper запускает цикл обработки сообщений, связанный с потоком. Поток работает, пока связанный с ним лупер не будет остановлен.

Для создания лупера, вызывается статический метод Looper.prepare(). Созданный лупер будет связан с потоком, в котором вызван этот метод.

Для старта лупера используется статический метод Looper.loop(). Между вызовами методов prepare() и loop() обычно создается Handler, который будет обрабатывать сообщения, приходящие в MessageQueue лупера.

Для остановки лупера используется метод quit() или quitSafely(). Разница между этими методами в том, что quit() останавливает лупер незамедлительно, а quitSafely() завершает обработку сообщений, которые уже добавлены в очередь.
Эти методы не статические и вызываются на инстансе класса Looper. Получить лупер текущего потока можно статическим методом Looper.myLooper(). Лупер UI потока можно получить методом Looper.getMainLooper().