Sobes.tech
Junior

Jak funguje hlavní vlákno v Androidu?

sobes.tech AI

Odpověď od AI

Hlavní vlákno (Main Thread) nebo vlákno UI v Androidu je zodpovědné za vykreslování uživatelského rozhraní, zpracování vstupních událostí a provádění většiny komponent aplikace (Activity, Service, Broadcast Receiver).

Jeho fungování je založeno na mechanismu Looper a Handler.

  1. Looper: Je třída, která cyklicky extrahuje zprávy (Message) z fronty zpráv (MessageQueue) a předává je k zpracování příslušnému Handlerovi. Každé vlákno s Looperem je "smyčkové". Hlavní vlákno je automaticky vytvořeno s Looperem.
  2. MessageQueue: Je datová struktura, která uchovává seznam zpráv k zpracování. Zprávy mohou obsahovat data (objekty, primitivní typy) a odkaz na Handler, který je má zpracovat.
  3. Handler: Je třída spojená s Looperem a MessageQueue vlákna. Umožňuje odesílat zprávy do MessageQueue a zpracovávat zprávy extrahované Looperem. Handler může odesílat zprávy jak do vlastního vlákna (například plánováním úkolů), tak do jiných vláken s Looperem.

Princip fungování:

  1. Looper hlavního vlákna se spustí a nepřetržitě zpracovává cyklus loop().
  2. Systém nebo jiná vlákna odesílají zprávy (například události dotyku, zprávy o životním cyklu Activity) do MessageQueue hlavního vlákna přes Handlery.
  3. Looper extrahuje následující zprávu z MessageQueue.
  4. Looper předá zprávu příslušnému Handlerovi.
  5. Handler zpracovává zprávu a provádí odpovídající logiku (například aktualizaci UI).

Důležité: Všechny operace související s aktualizací UI by měly být prováděny pouze v hlavním vlákně. Provádění dlouhotrvajících operací (síťové požadavky, práce se soubory) v hlavním vlákně povede k jeho zablokování (ANR - Application Not Responding) a zamrznutí aplikace. Pro takové operace je třeba používat pracovní vlákna (například s pomocí Coroutines, RxJava, ExecutorService, AsyncTask).