Junior
Ako funguje hlavné vlákno v Androidu?
sobes.tech AI
Odpoveď od AI
Hlavná vlákno (Main Thread) alebo vlákno UI v Android je zodpovedné za vykresľovanie používateľského rozhrania, spracovanie vstupných udalostí a vykonávanie väčšiny komponentov aplikácie (Activity, Service, Broadcast Receiver).
Jeho fungovanie je založené na mechanizme Looper a Handler.
- Looper: Je trieda, ktorá cyklicky extrahuje správy (Message) z fronty správ (MessageQueue) a odovzdáva ich na spracovanie príslušnému Handlerovi. Každé vlákno s Looperom je "cyklické". Hlavné vlákno je automaticky vytvorené s Looperom.
- MessageQueue: Je dátová štruktúra, ktorá uchováva zoznam správ na spracovanie. Správy môžu obsahovať údaje (objekty, primitívy) a odkaz na Handler, ktorý ich má spracovať.
- Handler: Je trieda spojená s Looperom a MessageQueue vlákna. Umožňuje odosielať správy do MessageQueue a spracovávať správy extrahované Looperom. Handler môže odosielať správy ako do vlastného vlákna (napríklad na plánovanie úloh), tak aj do iných vlákien s Looperom.
Princíp fungovania:
- Looper hlavného vlákna sa spustí a nepretržite spracováva cyklus
loop(). - Systém alebo iné vlákna odosielajú správy (napríklad udalosti dotyku, správy o životnom cykle Activity) do MessageQueue hlavného vlákna cez Handlery.
- Looper extrahuje nasledujúcu správu z MessageQueue.
- Looper odovzdá správu pripojenému Handlerovi.
- Handler spracováva správu a vykonáva príslušnú logiku (napríklad aktualizáciu UI).
Dôležité: Všetky operácie súvisiace s aktualizáciou UI by mali byť vykonávané iba v hlavnom vlákne. Vykonávanie dlhých operácií (sieťové požiadavky, práca so súbormi) v hlavnom vlákne povedie k jeho zablokovaniu (ANR - Application Not Responding) a zamrznutiu aplikácie. Pre takéto operácie je potrebné používať pracovné vlákna (napríklad pomocou Coroutines, RxJava, ExecutorService, AsyncTask).