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.
- 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.
- 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.
- 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:
- Looper glavne niti se pokreće i kontinuirano obrađuje ciklus
loop(). - Sistem ili druge niti šalju poruke (npr. događaje dodira, poruke o životnom ciklusu Activity-ja) u MessageQueue glavne niti putem Handler-a.
- Looper izvlači sledeću poruku iz MessageQueue.
- Looper prosleđuje poruku Handler-u povezanim sa njom.
- 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).