Sobes.tech
Middle

Handler necə kömək edir vəzifələri sinxron şəkildə yerinə yetirməyə?

sobes.tech Süni İntellekt

AI-dan cavab

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 quruluşları, 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ı Handler elan 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()