Sobes.tech
Junior

Kā darbojas galvenais pavedienis Android?

sobes.tech AI

Atbilde no AI

Galvenais pavedienis (Main Thread) vai UI pavedienis Android ir atbild par lietotāja interfeisa zīmēšanu, notikumu apstrādi un lielāko daļu lietojumprogrammas komponentu (Activity, Service, Broadcast Receiver) izpildi.

Tās darbība balstās uz Looper un Handler mehānismu.

  1. Looper: Tas ir klases, kas cikliski izvelk ziņojumus (Message) no MessageQueue rindas un nodod tos apstrādei attiecīgajam Handler. Katrs pavediens, kam ir Looper, ir "pīle". Galvenais pavediens tiek automātiski izveidots ar Looper.
  2. MessageQueue: Tas ir datu struktūra, kas glabā ziņojumu sarakstu, kas jāapstrādā. Ziņojumi var saturēt datus (objektus, primitivus) un atsauci uz Handler, kas tos apstrādās.
  3. Handler: Tas ir klases, kas ir saistīta ar pavediena Looper un MessageQueue. Tas ļauj sūtīt ziņojumus MessageQueue un apstrādāt no Looper saņemto ziņojumu. Handler var sūtīt ziņojumus gan savam pašreizējam pavedienam (piemēram, uzdevumu plānošanai), gan citiem pavedieniem ar Looper.

Darba princips:

  1. Galvenā pavediena Looper tiek palaists un nepārtraukti izpilda loop() ciklu.
  2. Sistēma vai citi pavedieni sūta ziņojumus (piemēram, pieskāriena notikumus, Activity dzīves cikla ziņojumus) caur Handleriem uz MessageQueue.
  3. Looper izvelk nākamo ziņojumu no MessageQueue.
  4. Looper nodod ziņojumu attiecīgajam Handler.
  5. Handler apstrādā ziņojumu, veicot atbilstošu loģiku (piemēram, UI atjaunināšanu).

Svarīgi: Visi darbi, kas saistīti ar UI atjaunināšanu, jāveic tikai galvenajā pavedienā. Ilgstošas operācijas (tīkla pieprasījumi, failu apstrāde) galvenajā pavedienā novedīs pie tā bloķēšanas (ANR - Pieteikuma neatbildēšana) un lietojumprogrammas aizsērēšanas. Šādām operācijām jāizmanto darba pavedieni (piemēram, ar Coroutine, RxJava, ExecutorService, AsyncTask).