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()