Sobes.tech
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.

  1. 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.
  2. 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ť.
  3. 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:

  1. Looper hlavného vlákna sa spustí a nepretržite spracováva cyklus loop().
  2. 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.
  3. Looper extrahuje nasledujúcu správu z MessageQueue.
  4. Looper odovzdá správu pripojenému Handlerovi.
  5. 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).