Sobes.tech
Middle

Шумо дар бораи dispatcher-ҳо дар Android чӣ медонед?

sobes.tech AI

Ҷавоб аз AI

Диспетчерҳо дар Android одатан бо корутинҳои Kotlin алоқаманданд ва муайян мекунанд, ки корутин дар кадом сӯрохиҳо иҷро мешавад. Онҳо тақсимоти вазифаҳоро байни сӯрохиҳо идора мекунанд. Диспетчерҳои асосӣ:

  • Dispatchers.Main: барои иҷрои вазифаҳо дар сӯрохи асосӣ (UI). Барои навсозии интерфейс ва кор бо тамғаҳо истифода мешавад.
  • Dispatchers.IO: оптимизатсияшуда барои амалиётҳои блоккунии воридотӣ/баромадӣ, мисли кор бо файлҳо, шабака ё базаи додаҳо. Пул сӯрохиҳоро дархост мекунад.
  • Dispatchers.Default: барои вазифаҳои шиддатноки CPU, ки бо бастан алоқаманд нестанд, масалан, сорт кардани рӯйхатҳои калон ё таҳлили JSON. Пул сӯрохиҳои умумиро истифода мебарад, ки одатан баробар бо шумораи ядроҳои CPU.
  • Dispatchers.Unconfined: ба сӯрохи муайян бастан надорад. Корутин дар сӯрохие оғоз мешавад, ки дар он startCoroutine даъват шудааст, ва дар сӯрохие идома меёбад, ки дар он амалиёти бастани иҷро шудааст. Барои ҳолатҳои умумӣ тавсия намешавад.

Интихоби диспетчер ба иҷроиш ва ҷавобгӯии барнома таъсир мерасонад. Истифодаи Dispatchers.Main барои амалиётҳои дарозмуддат UI-ро бастан мекунад, дар ҳоле ки Dispatchers.IO барои вазифаҳои CPU-шаҳрӣ метавонад оптималӣ набошад.

Маслиҳат барои истифода:

import kotlinx.coroutines.*

suspend fun fetchData() {
    // Иҷрои дархости шабакавӣ дар диспетчер IO
    val data = withContext(Dispatchers.IO) {
        // Симулясияи дархости шабакавӣ
        delay(1000)
        "Маълумоти шабакавӣ"
    }

    // Навсозии UI дар диспетчер Main
    withContext(Dispatchers.Main) {
        // Навсозии TextView ё унсури дигаре
        println("Маълумот гирифта шуд: $data")
    }
}

fun main() = runBlocking {
    fetchData()
}

Диспетчерҳо як компонент калидӣ дар Конкуренсияи Структурӣ дар корутинҳо мебошанд, ки идоракунии дурусти сӯрохиҳоро таъмин мекунанд ва аз рехтани захираҳо пешгирӣ мекунанд.