Ο μηχανισμός συνδρομής συμβάντων στο MVVMCross, κυρίως μέσω της διεπαφής `imvxmessenger ', χειρίζεται τη διαχείριση νήματος παρέχοντας αρκετές επιλογές για τον τρόπο με τον οποίο τα μηνύματα παραδίδονται στους συνδρομητές. Αυτό επιτρέπει στους προγραμματιστές να διαχειρίζονται τα σπειρώματα με βάση τις συγκεκριμένες απαιτήσεις της εφαρμογής τους.
Μέθοδοι συνδρομής
Το MVVMCROSS προσφέρει τρεις κύριες μεθόδους εγγραφής σε μηνύματα, το καθένα με διαφορετικές συνέπειες:
1. Εγγραφή: Αυτή η μέθοδος παρέχει μηνύματα απευθείας στο νήμα όπου δημοσιεύονται. Έχει τα χαμηλότερα γενικά έξοδα επεξεργασίας, καθώς τα μηνύματα λαμβάνονται συγχρόνως. Ωστόσο, απαιτεί προσεκτική εξέταση του νήματος στο οποίο θα εκτελέσει ο χειριστής μηνυμάτων. Εάν ο χειριστής πρέπει να αλληλεπιδράσει με το UI, βεβαιωθείτε ότι τρέχει στο νήμα UI. Διαφορετικά, ίσως να μην είναι σε θέση να ενημερώσει απευθείας τα στοιχεία UI.
2. SubscribeonMainThread: Αυτή η μέθοδος εξασφαλίζει ότι τα μηνύματα έχουν καταταχθεί στο κύριο νήμα UI. Είναι ιδανικό για χειριστές μηνυμάτων που πρέπει να εκτελούν εργασίες που σχετίζονται με το UI, καθώς εγγυάται ότι ο χειριστής θα εκτελέσει στο νήμα UI. Αυτό είναι ζωτικής σημασίας για την ενημέρωση των στοιχείων UI, καθώς τα περισσότερα πλαίσια UI απαιτούν ενημερώσεις UI στο κύριο νήμα.
3. Το quoteRearThreadPoolThread: Τα μηνύματα αναφέρονται στην ουρά για επεξεργασία σε νήμα πισίνας νήματος. Αυτή η προσέγγιση είναι κατάλληλη για εργασίες έντασης πόρων που δεν πρέπει να εμποδίσουν το UI ή τον εκδότη μηνυμάτων. Εξασφαλίζει την ασύγχρονη επεξεργασία, ακόμη και αν το μήνυμα δημοσιεύεται από ένα υπάρχον νήμα πισίνας νήματος.
Σκέψεις διαχείρισης νήματος
Κατά την επιλογή μιας μεθόδου συνδρομής, εξετάστε τα εξής:
- Ενημερώσεις UI: Εάν ο χειριστής μηνυμάτων σας πρέπει να ενημερώσει τα στοιχεία του UI, χρησιμοποιήστε το `uscribeonmainthread`. Αυτό εξασφαλίζει ότι οι ενημερώσεις UI εμφανίζονται στο σωστό νήμα.
-Εντατικά εργασίες έντασης πόρων: Για εργασίες που είναι έντασης πόρων ή δεν πρέπει να εμποδίσουν το UI, χρησιμοποιήστε το `uscribeonthreadpoolthread`. Αυτό διατηρεί το UI να ανταποκρίνεται ενώ χειρίζεται την εργασία ασύγχρονα.
- Σύγχρονη επεξεργασία: Εάν χρειάζεστε μηνύματα για επεξεργασία συγχρόνως και γνωρίζετε το νήμα στο οποίο θα δημοσιευθούν, χρησιμοποιήστε τη βασική μέθοδο `εγγραφείτε '.
Πρόσθετες παραμέτρους
Όλες οι μέθοδοι συνδρομής στο MVVMCross επιτρέπουν δύο πρόσθετες παραμέτρους:
- MVXReference: Αυτή η παράμετρος καθορίζει εάν η συνδρομή πρέπει να χρησιμοποιεί μια αδύναμη ή ισχυρή αναφορά. Οι αδύναμες αναφορές (`mvxreference.weak`) επιτρέπουν στον συλλέκτη απορριμμάτων να αφαιρέσει τη συνδρομή εάν ο συνδρομητής δεν αναφέρεται πλέον, ενώ οι ισχυρές αναφορές (` mvxreference.strong ') αποτρέπουν αυτό, εξασφαλίζοντας ότι η συνδρομή παραμένει ενεργή μέχρι να μην καταργηθεί ρητά.
- Ετικέτα: μπορεί να παρέχεται προαιρετική ετικέτα συμβολοσειράς για να κατηγοριοποιηθεί οι συνδρομές. Αυτό είναι χρήσιμο για τη διαχείριση πολλαπλών συνδρομών ή για σκοπούς φιλτραρίσματος.
Συνοπτικά, ο μηχανισμός συνδρομής συμβάντων MVVMCross παρέχει ευέλικτες επιλογές διαχείρισης νήματος, επιτρέποντας στους προγραμματιστές να επιλέξουν τον τρόπο με τον οποίο τα μηνύματα παραδίδονται με βάση τις συγκεκριμένες ανάγκες εφαρμογής τους. Αυτή η ευελιξία είναι ζωτικής σημασίας για τη διατήρηση των ανταποκρινόμενων UI και την αποτελεσματική αντιμετώπιση των εργασιών φόντου.
Αναφορές:[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-wwhere-when-when-use-observableCollection-in-Mvvmcross
[4] https://www.youtube.com/watch?v=hqdvrwwzkik
[5] https://www.mvvmcross.com/documentation/fundamentals/testing
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/april/mvvm-multithreading-and-dispatching-in-mvvm-applications
[7] https://docs.prismlibrary.com/docs/event-aggregator.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/fundamentals/viewmodel-lifecycle