Sobes.tech
Junior

Androidдеги негизги агым кантип иштейт?

sobes.tech AI

AIден жооп

Негизги агым (Main Thread) же UI агымы Androidда колдонуучунун интерфейсин чийүү, кирүү окуяларын иштетүү жана көпчүлүк колдонмо компоненттерин (Activity, Service, Broadcast Receiver) аткаруу үчүн жооптуу.

Анын иши Looper жана Handler механизмине негизделген.

  1. Looper: Бул класс, ал циклдик түрдө билдирүүлөрдү (Message) MessageQueue кезегинен чыгарып, аларды тиешелүү Handler'га иштетүү үчүн жиберет. Ар бир Looper бар агым "петлдүү" болот. Негизги агым автоматтык түрдө Looper менен түзүлөт.
  2. MessageQueue: Бул маалымат структурасы, ал билдирүүлөрдүн тизмесин сактайт, алар иштетилиши керек. Билдирүүлөрдө маалыматтар (объекттер, примиативдер) жана аларды иштетүүчү Handlerдин шилтемеси болушу мүмкүн.
  3. Handler: Бул класс, ал Looper жана MessageQueue менен байланышкан. Ал MessageQueueге билдирүүлөрдү жиберүүгө жана Looper тарабынан алынган билдирүүлөрдү иштетүүгө мүмкүндүк берет. Handler өзүнүн агымына (мисалы, тапшырмаларды пландаштыруу) же башка Looper бар агымдарга билдирүүлөрдү жибере алат.

Ишке ашыруу принциби:

  1. Негизги агымдын Looper иштетилет жана үзгүлтүксүз loop() циклін иштетет.
  2. Жүйе же башка агымдар билдирүүлөрдү (мисалы, тийүү окуялары, Activityнин жашоо цикли жөнүндө билдирүүлөр) Handler'лар аркылуу MessageQueueге жиберет.
  3. Looper MessageQueueден кийинки билдирүүнү чыгарат.
  4. Looper бул билдирүүнү тиешелүү Handlerга өткөрөт.
  5. Handler билдирүүнү иштетет, тиешелүү логиканы аткарат (мисалы, UI жаңыртуу).

Маанилүү: Бардык UI жаңыртуу операциялары гана негизги агымда аткарылышы керек. Узак мөөнөттүү операцияларды (желелүү суроолор, файлдар менен иштөө) негизги агымда аткаруу анын блокко киришине (ANR - колдонмо жооп бербейт) жана колдонмонун кармалышына алып келет. Мындай операциялар үчүн иштөө агымдарын колдонуу керек (мисалы, Coroutines, RxJava, ExecutorService, AsyncTask аркылуу).