Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCross'taki olay abonelik mekanizması iş parçacığı yönetimini nasıl kullanıyor


MVVMCross'taki olay abonelik mekanizması iş parçacığı yönetimini nasıl kullanıyor


MVVMCross'taki olay abonelik mekanizması, öncelikle `` Imvxmessens '' arayüzü aracılığıyla, mesajların abonelere nasıl teslim edildiğine dair birkaç seçenek sunarak iş parçacığı yönetimini işler. Bu, geliştiricilerin başvurularının özel gereksinimlerine göre dişlendirmeyi yönetmelerine olanak tanır.

Abonelik Yöntemleri

MVVMCross, her biri farklı iş parçacığı sonuçlarına sahip mesajlara abone olmak için üç ana yöntem sunar:

1. Abone Olun: Bu yöntem, doğrudan yayınlandıkları iş parçacığında mesajlar verir. Mesajlar senkronize edildiğinden en düşük işlem yüküne sahiptir. Ancak, mesaj işleyicisinin yürütüleceği iş parçacığının dikkatli bir şekilde değerlendirilmesini gerektirir. İşleyicinin kullanıcı arayüzü ile etkileşime girmesi gerekiyorsa, UI iş parçacığında çalıştığından emin olun; Aksi takdirde, kullanıcı arayüzü öğelerini doğrudan güncelleyemeyebilir.

2. AboneonMainThread: Bu yöntem, mesajların ana kullanıcı arayüzüne maruz kalmasını sağlar. İşleyicinin UI iş parçacığında yürütüleceğini garanti ettiğinden, UI ile ilgili görevleri gerçekleştirmesi gereken mesaj işleyicileri için idealdir. Bu, UI öğelerini güncellemek için çok önemlidir, çünkü çoğu UI çerçevesi ana iş parçacığında UI güncellemelerinin oluşmasını gerektirir.

3. AboneonThreadPoolthread: Bir iş parçacığı havuzu iş parçacığında işlemek için mesajlar sıraya girer. Bu yaklaşım, kullanıcı arayüzünü veya mesaj yayıncısını engellememesi gereken kaynak yoğun görevler için uygundur. Mesaj mevcut bir iş parçacığı havuzu iş parçacığından yayınlanmış olsa bile eşzamansız işlem sağlar.

Konu Yönetimi Hususları

Bir abonelik yöntemi seçerken aşağıdakileri göz önünde bulundurun:

- UI Güncellemeleri: Mesaj işleyicinizin kullanıcı arayüzü öğelerini güncellemesi gerekiyorsa, `` aboneonmainthread '' kullanın. Bu, UI güncellemelerinin doğru iş parçacığında gerçekleşmesini sağlar.

-Kaynak yoğun görevler: Kaynak yoğun olan veya kullanıcı arayüzünü engellememesi gereken görevler için `` aboneonThreadPoolthread '' kullanın. Bu, görevi eşzamansız olarak işlerken kullanıcı arayüzünü duyarlı tutar.

- Senkron İşleme: Senkronize olarak işlenecek mesajlara ihtiyacınız varsa ve üzerinde yayınlanacakları iş parçacığının farkındaysanız, temel `` Abone Ol '' yöntemini kullanın.

Ek parametreler

MVVMCross'taki tüm abonelik yöntemleri iki ek parametreye izin verir:

- MVXReference: Bu parametre, aboneliğin zayıf veya güçlü bir referans kullanıp kullanmayacağını belirtir. Zayıf referanslar (`mvxreference.weak`), abone artık referans alınmazsa, çöp toplayıcının aboneliği kaldırmasına izin verirken, güçlü referanslar (` mvxreference.strong`) bunu önleyerek aboneliğin açıkça aboneliksize kadar aktif kalmasını sağlar.

- Etiket: Abonelikleri kategorize etmek için isteğe bağlı bir dize etiketi sağlanabilir. Bu, birden çok abonelik veya filtreleme amaçları için yararlıdır.

Özetle, MVVMCross'un olay abonelik mekanizması esnek iş parçacığı yönetimi seçenekleri sağlar ve geliştiricilerin mesajların özel uygulama ihtiyaçlarına göre nasıl teslim edildiğini seçmelerini sağlar. Bu esneklik, duyarlı kullanıcı arayüzünü korumak ve arka plan görevlerini verimli bir şekilde ele almak için çok önemlidir.

Alıntılar:
[1] https://www.mvvmcross.com/documentation/plugins/messenger
[2] https://www.mvvmcross.com/mvvmcross-4.2/
[3] https://stackoverflow.com/questions/18465927/advice-on-where-and-when-to-o-o-sobservablecollection-in-mvvmcross
[4] https://www.youtube.com/watch?v=hqdvrwwzkik
[5] https://www.mvvmcross.com/documentation/fundament/Testing
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/april/mvvm-multithreading-dpatching-in-mvm-pplications
[7] https://docs.prismlibrary.com/docs/event-aggreator.html
[8] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[9] https://stackoverflow.com/questions/17324650/mvvmcross-multithreading-ins
[10] https://www.mvvmcross.com/documentation/fundament/viewmodel-lifecycle