Sobes.tech
Middle

Handler кандайча тапшырмаларды синхрондуу түрдө аткарууга жардам берет?

sobes.tech AI

AIден жооп

Handler vəzifələri sinxron şəkildə yerinə yetirməyə kömək etmir. O, mesajlar (Message) və Runnable obyektlərini göndərmək və işləmək üçün istifadə olunur; bunlar müəyyən bir Looper ilə əlaqələndirilmişdir və adətən bu Looper bir ipə bağlıdır.

Handler-ın əsas məqsədi, məsələn, fon ipindən UI-ni yeniləmək üçün, iplar arasında asinxron qarşılıqlı əlaqəni asanlaşdırmaqdır.

Handler vasitəsilə göndərilən vəzifələr, əlaqəli Looper-ın MessageQueue-suna yerləşdirilir və Looper-ə bağlı ipdə ardıcıllıqla işlənir. Bu bir ip daxilində işləmə ardıcıllığı, ardıcıllıq illüziyasını yarada bilər, lakin iplar arasında bloklama əməliyyatları kontekstində həqiqi sinxronizasiya deyil.

Başqa mexanizmlər istifadə olunur:

  • Bloklama çağırışlar (UI ip üçün tövsiyə edilmir).
  • Future/CompletableFuture.
  • CountDownLatch.
  • Semaphore.
  • Kotlin dilinin konstruktsiyaları, məsələn, runBlocking (diqqətlə istifadə edin).

UI-ni yeniləmək üçün asinxron vəzifə nümunəsi (Handler-dan istifadə):

// Əsas ipə bağlı Handlerni e'lon edirik
val uiHandler = Handler(Looper.getMainLooper())

// Arxa plan ipində uzun müddətli əməliyyat icra edirik
Thread {
    // Uzun işin simulyasiyası
    Thread.sleep(2000)

    // Əsas ipin Handler-ına Runnable göndəririk
    uiHandler.post {
        // Bu kod əsas ipdə icra olunur, UI yenilənə bilər
        textView.text = "İş tamamlandı!"
    }
}.start()