Sobes.tech
Middle

Ինչպե՞ս է Handler-ը օգնում կատարել առաջադրանքները սինխրոնային կերպով։

sobes.tech AI

Պատասխան AI-ից

Handler օգնում է իրականացնել առաջադրանքները սինխրոնային կերպով։ Այն օգտագործվում է հաղորդագրությունների (Message) և Runnable օբյեկտների ուղարկման և մշակման համար, որոնք կապված են որոշակի Looper-ի հետ, որը սովորաբար կապված է մի թելի հետ:

Handler-ի հիմնական նպատակը էական է՝ հեշտացնել թելերի միջև ասինխրոն փոխազդեցությունը, օրինակ՝ UI-ն թաքնված թելից թարմացնելիս:

Handler-ի միջոցով ուղարկված առաջադրանքները տեղադրվում են կապված LooperMessageQueue-ում և հերթականորեն մշակվում են այն թելում, որի հետ կապված է Looper-ը։ Այս մշակման հաջորդականությունը մեկ թելում կարող է ստեղծել հերթականության տպավորություն, բայց իրական սինխրոնիզացիա չէ՝ բլոկավորող գործողությունների համատեքստում թելերի միջև:

Սինխրոնային կատարման կամ արդյունքի սպասման համար օգտագործվում են այլ մեխանիզմներ՝

  • Բլոկավոր կանչեր (չեն խորհուրդ տրվում UI թելին)
  • Future/CompletableFuture
  • CountDownLatch
  • Semaphore
  • Kotlin լեզվի կառուցվածքներ՝ օրինակ runBlocking (ուշադիր օգտագործել)

Օրինակ՝ Handler-ի օգտագործում որպես ասինխրոն առաջադրանք (UI թարմացում)

// Հայտարարում ենք Handler, որը կապված է գլխավոր թելին
val uiHandler = Handler(Looper.getMainLooper())

// Կատարում ենք երկարատև գործողություն ֆոնային թելում
Thread {
    // Դիտարկում երկար աշխատանք
    Thread.sleep(2000)

    // Ուղարկում Runnable գլխավոր թելին
    uiHandler.post {
        // Այս կոդը կատարվում է գլխավոր թելում, կարող է թարմացնել UI-ն
        textView.text = "Աշխատանքը ավարտվեց!"
    }
}.start()