Sobes.tech
Middle

Чӣ гуна Handler кӯмак мекунад, ки вазифаҳоро дар синхрон иҷро кунад?

sobes.tech AI

Ҷавоб аз AI

Handler кӯмак намекунад дар иҷрои вазифаҳо ба таври синхронӣ. Он барои фиристодан ва коркарди паёмҳо (Message) ва объектҳои Runnable истифода мешавад, ки бо Looper муайян пайваст шудаанд, ки одатан ба як нӯг пайваст аст.

Мақсади асосии Handler - осон кардани муоширати асинхронӣ байни нӯгҳо, масалан, барои навсозии UI аз нӯги пасзамина.

Вазифаҳое, ки тавассути Handler фиристода мешаванд, ба навбат дар MessageQueueLooper пайваст ҷойгир мешаванд ва ба таври пайдарпай дар нӯг, ки Looper ба он пайваст аст, коркард мешаванд. Ин пайдарпайии коркард дар дохили як нӯг метавонад иллюзияи тартибро эҷод кунад, аммо он синхронӣ дар контексти амалҳои блоккунанда байни нӯгҳоро намебарорад.

Барои иҷрои синхронӣ ё интизорӣ барои натиҷаи вазифа дар нӯги дигар, механизмҳои дигар истифода мешаванд:

  • Зангҳои блоккунанда (намуда барои нӯги UI).
  • Future/CompletableFuture.
  • CountDownLatch.
  • Semaphore.
  • Конструксияҳои забони Kotlin, масалан, runBlocking (бо эҳтиёт истифода баред).

Масалан барои истифодаи Handler барои вазифаи асинхронӣ (навсозии UI):

// Ҳолати Handler, ки ба нӯги асосӣ пайваст аст
val uiHandler = Handler(Looper.getMainLooper())

// Иҷрои амали дароз дар нӯги пасзамина
Thread {
    // Имитацияи кори дароз
    Thread.sleep(2000)

    // Иҷрои Runnable ба навбат дар Handler-и нӯги асосӣ
    uiHandler.post {
        // Ин код дар нӯги асосӣ иҷро мешавад, метавонад UI-ро навсозӣ кунад
        textView.text = "Кору анҷом ёфт!"
    }
}.start()