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:
- Handler je vytvorený vo vlákne, ktoré bude spracovávať správy (napríklad UI vlákne).
- Tento Handler je spojený s Looperom tohto vlákna a jeho MessageQueue.
- 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
postalebosendMessage). - Looper prijímajúceho vlákna vyťahuje úlohy z MessageQueue.
- 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.