Sobes.tech
Junior

Co je to Handler v Androidu?

sobes.tech AI

Odpověď od AI

Handler je mechanismus pro odesílání a zpracování objektů Message a Runnable z vlákna, které vytvoří Handler, do jiného vlákna (nebo do stejného).

Umožňuje plánovat vykonání kódu v konkrétním vlákně, i když se nacházíte v jiném vlákně. Handler je spojen s Looper, který zpracovává frontu zpráv ve vlákně.

Hlavní komponenty:

  • Handler: Odesílá zprávy a úkoly, zpracovává je ve spojovaném vlákně.
  • Looper: Spouští cyklus zpracování fronty zpráv pro dané vlákno. Každé vlákno může mít pouze jeden Looper, ale ne všechna vlákna ho mají implicitně (například hlavní vlákno ho má).
  • MessageQueue: Fronta zpráv spojená s Looper.
  • Message/Runnable: Objekty, které jsou odesílány přes Handler k vykonání.

Použití:

  • Aktualizace UI z ne-UI vlákna.
  • Plánování úkolů se zpožděním nebo v určitou dobu.
  • Odesílání zpráv mezi vlákny.
// Příklad použití Handleru pro aktualizaci UI z pozadí vlákna
Handler mainHandler = new Handler(Looper.getMainLooper()); // Získání Handleru hlavního vlákna

new Thread(() -> {
    // Provedení nějaké dlouhé operace na pozadí
    String result = doBackgroundWork();

    // Odeslání výsledku do hlavního vlákna pro aktualizaci UI
    mainHandler.post(() -> {
        // Tento kód bude spuštěn v hlavním vlákně
        updateTextView(result);
    });
}).start();

private String doBackgroundWork() {
    // Simulace dlouhé práce
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "Výsledek práce na pozadí";
}

private void updateTextView(String text) {
    // Aktualizace UI prvku
    // someTextView.setText(text);
}