Sobes.tech
Junior

Co je to Handler v Androidu?

sobes.tech AI

Odpověď od AI

Handler v Androidu je mechanismus pro komunikaci mezi vlákny. Umožňuje odesílat a zpracovávat Message a Runnable z jednoho vlákna do fronty zpráv (MessageQueue) jiného vlákna (obvykle UI vlákna).

Hlavní komponenty:

  • Handler: Objekt spojený s konkrétním vláknem a jeho MessageQueue. Odesílá zprávy a Runnable do fronty a zpracovává je jejich extrakcí.
  • Looper: Objekt spojený s vláknem. "Spouští" vlákno, neustále extrahuje úkoly (Message nebo Runnable) z MessageQueue a předává je příslušnému Handleru ke zpracování.
  • MessageQueue: Fronta úkolů (Message nebo Runnable), které čekají na zpracování Looperem.

Jak to funguje:

  1. Handler je vytvořen ve vlákně, které bude zpracovávat zprávy (například UI vlákno).
  2. Tento Handler je spojen s Looperem tohoto vlákna a jeho MessageQueue.
  3. Z jiného vlákna (například na pozadí) lze posílat zprávy nebo Runnable do MessageQueue pomocí metod Handleru (například post nebo sendMessage).
  4. Looper přijímajícího vlákna extrahuje úkoly z MessageQueue.
  5. Looper předává každý úkol příslušnému Handleru k zpracování.

Příklad použití pro aktualizaci UI z vlákna na pozadí:

// Vytvoření Handleru v UI vlákně
Handler uiHandler = new Handler(Looper.getMainLooper());

// V vlákně na pozadí:
new Thread(new Runnable() {
    @Override
    public void run() {
        // Provedení dlouhotrvající operace...

        // Aktualizace UI přes Handler
        uiHandler.post(new Runnable() {
            @Override
            public void run() {
                // Kód, který bezpečně aktualizuje UI
                textView.setText("Operace dokončena!");
            }
        });
    }
}).start();

Handler se používá k bezpečnému provádění operací v určitém vlákně (nejčastěji UI) bez blokování hlavního vlákna. To je důležité, protože většina operací s UI by měla být provedena pouze v hlavním vlákně.