Sobes.tech
Junior

Čo je Handler v Android?

sobes.tech AI

Odpoveď od AI

Handler v Android je mechanizmus na interakciu medzi vláknami. Umožňuje odosielať a spracovávať Message a Runnable z jedného vlákna do fronty správ (MessageQueue) iného vlákna (zvyčajne UI vlákna).

Hlavné komponenty:

  • Handler: Objekt, ktorý je spojený s konkrétnym vláknom a jeho MessageQueue. Odosiela správy a Runnable do fronty a tiež ich spracováva, vyťahovaním z fronty.
  • Looper: Objekt, ktorý je viazaný na vlákno. "Spúšťa" vlákno, neustále vyťahuje úlohy (Message alebo Runnable) z MessageQueue a odovzdáva ich príslušnému Handleru na spracovanie.
  • MessageQueue: Fronta úloh (Message alebo Runnable), ktoré čakajú na spracovanie Looperom.

Ako to funguje:

  1. Handler je vytvorený vo vlákne, ktoré bude spracovávať správy (napríklad UI vlákne).
  2. Tento Handler je spojený s Looperom tohto vlákna a jeho MessageQueue.
  3. Z iného vlákna (napríklad z pozadia) je možné odosielať správy alebo Runnable do MessageQueue prostredníctvom metód Handlera (napríklad post alebo sendMessage).
  4. Looper prijímajúceho vlákna vyťahuje úlohy z MessageQueue.
  5. Looper odovzdáva každú úlohu príslušnému Handleru na spracovanie.

Príklad použitia na aktualizáciu UI z vlákna na pozadí:

// Vytvorenie Handlera v UI vlákne
Handler uiHandler = new Handler(Looper.getMainLooper());

// V vlákne na pozadí:
new Thread(new Runnable() {
    @Override
    public void run() {
        // Vykonanie dlhodobej operácie...

        // Aktualizácia UI cez Handler
        uiHandler.post(new Runnable() {
            @Override
            public void run() {
                // Tu je kód, ktorý bezpečne aktualizuje UI
                textView.setText("Operácia dokončená!");
            }
        });
    }
}).start();

Handler sa používa na bezpečné vykonávanie operácií v určitom vlákne (najčastejšie UI) bez blokovania hlavného vlákna. Je to nevyhnutné, pretože väčšina operácií s UI by mala byť vykonávaná iba v hlavnom vlákne.