Junior
Co je to Handler v Androidu?
sobes.tech AI
Odpověď od AI
Handler v Androidu je mechanismus pro komunikaci mezi vlákny. Umožňuje odesílat a zpracovávat Message a Runnable z jednoho vlákna do fronty zpráv (MessageQueue) jiného vlákna (obvykle UI vlákna).
Hlavní komponenty:
- Handler: Objekt spojený s konkrétním vláknem a jeho MessageQueue. Odesílá zprávy a Runnable do fronty a zpracovává je jejich extrakcí.
- Looper: Objekt spojený s vláknem. "Spouští" vlákno, neustále extrahuje úkoly (Message nebo Runnable) z MessageQueue a předává je příslušnému Handleru ke zpracování.
- MessageQueue: Fronta úkolů (Message nebo Runnable), které čekají na zpracování Looperem.
Jak to funguje:
- Handler je vytvořen ve vlákně, které bude zpracovávat zprávy (například UI vlákno).
- Tento Handler je spojen s Looperem tohoto vlákna a jeho MessageQueue.
- Z jiného vlákna (například na pozadí) lze posílat zprávy nebo Runnable do MessageQueue pomocí metod Handleru (například
postnebosendMessage). - Looper přijímajícího vlákna extrahuje úkoly z MessageQueue.
- Looper předává každý úkol příslušnému Handleru k zpracování.
Příklad použití pro aktualizaci UI z vlákna na pozadí:
// Vytvoření Handleru v UI vlákně
Handler uiHandler = new Handler(Looper.getMainLooper());
// V vlákně na pozadí:
new Thread(new Runnable() {
@Override
public void run() {
// Provedení dlouhotrvající operace...
// Aktualizace UI přes Handler
uiHandler.post(new Runnable() {
@Override
public void run() {
// Kód, který bezpečně aktualizuje UI
textView.setText("Operace dokončena!");
}
});
}
}).start();
Handler se používá k bezpečnému provádění operací v určitém vlákně (nejčastěji UI) bez blokování hlavního vlákna. To je důležité, protože většina operací s UI by měla být provedena pouze v hlavním vlákně.