Sobes.tech
Middle

Czym jest Looper w Androidzie?

sobes.tech AI

Odpowiedź od AI

Looper to klasa w Android, która służy do obsługi kolejki wiadomości (MessageQueue) w wątkach. Łączy wątek z kolejką wiadomości, umożliwiając mu odbieranie i przetwarzanie wiadomości z tej kolejki.

Zasada działania:

  1. Tworzenie Looper: W wątku, który ma mieć kolejkę wiadomości, wywołuje się Looper.prepare().
  2. Uruchomienie pętli: Wywołuje się Looper.loop(). To wywołanie blokuje wątek, dopóki Looper nie zostanie zatrzymany. Wewnątrz pętli Looper nieprzerwanie pobiera wiadomości z MessageQueue i wysyła je do docelowego Handler.
  3. Zatrzymanie Looper: Aby zakończyć pracę, wywołuje się Looper.quit() lub Looper.quitSafely().

Handler służy do wysyłania wiadomości do MessageQueue Loopera i ich obsługi w powiązanym z nim wątku. Przykład użycia:

// W wątku, w którym ma być Looper
new Thread(() -> {
    Looper.prepare(); // 1. Tworzy się Looper i MessageQueue dla tego wątku.
    Handler handler = new Handler(Looper.myLooper()) { // 2. Tworzy się Handler powiązany z Looper tego wątku.
        @Override
        public void handleMessage(Message msg) {
            // Obsługa wiadomości w tym wątku
        }
    };
    Looper.loop(); // 3. Uruchamia się pętla Looper do obsługi wiadomości.
}).start();

// W innym wątku, wysyłanie wiadomości
handler.sendMessage(/* twoja wiadomość */);

Looper jest niezbędny, aby wątki mogły obsługiwać zadania asynchroniczne i komunikować się między sobą, szczególnie podczas pracy z wątkiem UI (który domyślnie ma Looper).