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: Ин структураи додаҳоест, ки рӯйхати паёмҳоро нигоҳ медорад, ки бояд коркард шаванд. Паёмҳо метавонанд маълумот (объектҳо, primitives) ва истинод ба Handler дошта бошанд, ки бояд онҳоро коркард кунад.
  3. Handler: Ин синфест, ки бо Looper ва MessageQueue-и нӯг пайваст аст. Он имкон медиҳад, ки паёмҳоро ба MessageQueue фиристад ва паёмҳои баровардашударо, ки Looper мебарорад, коркард кунад. Handler метавонад паёмҳоро ҳам ба нӯги худ (масалан, барои нақшаи вазифаҳо) ва ҳам ба нӯгҳои дигар бо Looper фиристад.

Принсипи кор:

  1. Looper-и нӯги асосӣ оғоз мешавад ва ба таври пайваста давом мекунад, ки цикл loop()-ро иҷро мекунад.
  2. Система ё нӯгҳои дигар паёмҳоро (масалан, ҳодисаҳои тамос, паёмҳо дар бораи ҳаёти Activity) ба MessageQueue-и нӯги асосӣ тавассути Handlers мефиристанд.
  3. Looper паёми ояндаро аз MessageQueue мебарорад.
  4. Looper паёмиро ба Handler-и алоқаманд бо он мефиристад.
  5. Handler паёмиро коркард мекунад ва логикаи дахлдорро иҷро мекунад (масалан, навсозии UI).

Мухим: Ҳамаи амалиётҳое, ки бо навсозии UI алоқаманданд, бояд танҳо дар нӯги асосӣ иҷро шаванд. Иҷрои амалиётҳои дарозмуддат (суроғаҳои шабакавӣ, кор бо файлҳо) дар нӯги асосӣ ба баста шудани он (ANR - Application Not Responding) ва даргиронии барнома оварда мерасонад. Барои чунин амалиётҳо бояд нӯгҳои корӣ истифода шаванд (масалан, бо кӯмаки Coroutines, RxJava, ExecutorService, AsyncTask).