Sobes.tech
Junior

Kako radi glavni tok u Androidu?

sobes.tech АИ

Одговор од АИ

Glavni tok (Main Thread) ili UI tok u Androidu je odgovoran za prikaz korisničkog interfejsa, obradu događaja unosa i izvršavanje većine komponenti aplikacije (Activity, Service, Broadcast Receiver).

Njegov rad se zasniva na mehanizmu Looper i Handler.

  1. Looper: To je klasa koja ciklički izvlači poruke (Message) iz reda poruka (MessageQueue) i prosleđuje ih na obradu odgovarajućem Handler-u. Svaki tok koji ima Looper je "petljački". Glavni tok se automatski kreira sa Looper-om.
  2. MessageQueue: To je struktura podataka koja čuva listu poruka koje treba obraditi. Poruke mogu sadržavati podatke (objekte, primitivne tipove) i referencu na Handler koji ih treba obraditi.
  3. Handler: To je klasa povezana sa Looper-om i MessageQueue-om niti. Omogućava slanje poruka u MessageQueue i obradu poruka koje je izvezao Looper. Handler može slati poruke i u sopstvenu nit (npr. za planiranje zadataka) ili u druge niti sa Looper-om.

Princip rada:

  1. Looper glavne niti se pokreće i kontinuirano obrađuje ciklus loop().
  2. Sistem ili druge niti šalju poruke (npr. događaje dodira, poruke o životnom ciklusu Activity-ja) u MessageQueue glavne niti putem Handler-a.
  3. Looper izvlači sledeću poruku iz MessageQueue.
  4. Looper prosleđuje poruku Handler-u povezanim sa njom.
  5. Handler obrađuje poruku, izvršavajući odgovarajuću logiku (npr. ažuriranje UI-ja).

Važno: Sve operacije povezane sa ažuriranjem UI-ja moraju se obavljati samo u glavnoj niti. Izvođenje dugotrajnih operacija (mrežni zahtevi, rad sa fajlovima) u glavnoj niti će dovesti do njenog blokiranja (ANR - Application Not Responding) i zamrzavanja aplikacije. Za takve operacije treba koristiti radne niti (npr. pomoću Coroutines, RxJava, ExecutorService, AsyncTask).