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:
- Handler sukuriamas sraute, kuris apdoros žinutes (pavyzdžiui, UI sraute).
- Šis Handler yra susijęs su to srauto Looper ir MessageQueue.
- Iš kito srauto (pavyzdžiui, foninio) galima siųsti žinutes arba Runnable į MessageQueue per Handler metodus (pavyzdžiui,
postarbasendMessage). - Looper ištraukia užduotis iš MessageQueue.
- 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.