Sobes.tech
Junior

Kas yra Handler Android?

sobes.tech AI

Atsakymas iš AI

Android Handler yra mechanizmas, skirtas sąveikai tarp srautų. Jis leidžia siųsti ir apdoroti Message ir Runnable iš vieno srauto į kito srauto (paprastai UI srauto) MessageQueue.

Pagrindinės sudedamosios dalys:

  • Handler: Objektas, susijęs su konkrečiu srautu ir jo MessageQueue. Jis siunčia žinutes ir Runnable į eilę ir taip pat jas apdoroja, ištraukiant iš eilės.
  • Looper: Objektas, susijęs su srautu. Jis "paleidžia" srautą, nuolat ištraukia užduotis (Message arba Runnable) iš MessageQueue ir perduoda jas atitinkamam Handleriui apdoroti.
  • MessageQueue: Užduočių (Message arba Runnable) eilė, kurios laukia Looper apdorojimo.

Kaip tai veikia:

  1. Handler sukuriamas sraute, kuris apdoros žinutes (pavyzdžiui, UI sraute).
  2. Šis Handler yra susijęs su to srauto Looper ir MessageQueue.
  3. Iš kito srauto (pavyzdžiui, foninio) galima siųsti žinutes arba Runnable į MessageQueue per Handler metodus (pavyzdžiui, post arba sendMessage).
  4. Looper ištraukia užduotis iš MessageQueue.
  5. Looper perduoda kiekvieną užduotį atitinkamam Handleriui apdoroti.

Pavyzdys, kaip naudoti UI atnaujinimui iš foninio srauto:

// Handler sukūrimas UI sraute
Handler uiHandler = new Handler(Looper.getMainLooper());

// Fono sraute:
new Thread(new Runnable() {
    @Override
    public void run() {
        // Ilgai trunkančios operacijos vykdymas...

        // UI atnaujinimas per Handler
        uiHandler.post(new Runnable() {
            @Override
            public void run() {
                // Čia kodas, kuris saugiai atnaujina UI
                textView.setText("Operacija baigta!");
            }
        });
    }
}).start();

Handler naudojamas saugiam operacijų vykdymui tam tikrame sraute (dažniausiai UI) be pagrindinio srauto blokavimo. Tai būtina, nes dauguma UI operacijų turi būti vykdomos tik pagrindiniame sraute.