Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon กลไกการสมัครสมาชิกเหตุการณ์ใน MVVMcross จัดการการจัดการเธรดอย่างไร


กลไกการสมัครสมาชิกเหตุการณ์ใน MVVMcross จัดการการจัดการเธรดอย่างไร


กลไกการสมัครสมาชิกเหตุการณ์ใน MVVMCROSS ส่วนใหญ่ผ่านอินเตอร์เฟส `IMVXMessenger` จัดการการจัดการเธรดโดยการให้ตัวเลือกหลายอย่างสำหรับวิธีการส่งข้อความไปยังสมาชิก สิ่งนี้ช่วยให้นักพัฒนาสามารถจัดการเธรดตามข้อกำหนดเฉพาะของแอปพลิเคชัน

วิธีการสมัครสมาชิก

MVVMCROSS เสนอวิธีการหลักสามวิธีในการสมัครรับข้อความแต่ละรายการมีผลกระทบจากเธรดที่แตกต่างกัน:

1. สมัครสมาชิก: วิธีนี้ส่งข้อความโดยตรงบนเธรดที่เผยแพร่ มันมีค่าใช้จ่ายในการประมวลผลต่ำสุดเนื่องจากข้อความได้รับการซิงโครนัส อย่างไรก็ตามมันต้องพิจารณาอย่างรอบคอบเกี่ยวกับเธรดที่ตัวจัดการข้อความจะดำเนินการ หากตัวจัดการจำเป็นต้องโต้ตอบกับ UI ให้แน่ใจว่ามันทำงานบนเธรด UI มิฉะนั้นอาจไม่สามารถอัปเดตองค์ประกอบ UI ได้โดยตรง

2. SubcribeonMainThread: วิธีนี้ทำให้มั่นใจได้ว่าข้อความจะถูกส่งไปยังเธรด UI หลัก เหมาะอย่างยิ่งสำหรับตัวจัดการข้อความที่ต้องทำงานที่เกี่ยวข้องกับ UI เนื่องจากรับประกันได้ว่าตัวจัดการจะดำเนินการในเธรด UI นี่เป็นสิ่งสำคัญสำหรับการอัปเดตองค์ประกอบ UI เนื่องจากเฟรมเวิร์ก UI ส่วนใหญ่ต้องการการอัปเดต UI ที่จะเกิดขึ้นในเธรดหลัก

3. SubcribeOnThreadPoolThread: ข้อความจะถูกคิวสำหรับการประมวลผลบนเธรดพูลเธรด วิธีการนี้เหมาะสำหรับงานที่ใช้ทรัพยากรมากซึ่งไม่ควรปิดกั้น UI หรือผู้เผยแพร่ข้อความ มันทำให้มั่นใจได้ว่าการประมวลผลแบบอะซิงโครนัสแม้ว่าข้อความจะถูกเผยแพร่จากเธรดพูลเธรดที่มีอยู่

ข้อควรพิจารณาในการจัดการเธรด

เมื่อเลือกวิธีการสมัครสมาชิกให้พิจารณาสิ่งต่อไปนี้:

- การอัปเดต UI: หากตัวจัดการข้อความของคุณต้องการอัปเดตองค์ประกอบ UI ให้ใช้ `subcribeonMainThread ' สิ่งนี้ทำให้มั่นใจได้ว่าการอัปเดต UI เกิดขึ้นในเธรดที่ถูกต้อง

-งานที่ใช้ทรัพยากรมาก: สำหรับงานที่ใช้ทรัพยากรมากหรือไม่ควรบล็อก UI ให้ใช้ `subcribeonThreadPoolThread ' สิ่งนี้ช่วยให้ UI ตอบสนองได้ในขณะที่จัดการงานแบบอะซิงโครนัส

- การประมวลผลแบบซิงโครนัส: หากคุณต้องการข้อความที่จะประมวลผลแบบซิงโครนัสและตระหนักถึงเธรดที่จะเผยแพร่ให้ใช้วิธีการพื้นฐาน `สมัครสมาชิก

พารามิเตอร์เพิ่มเติม

วิธีการสมัครสมาชิกทั้งหมดใน MVVMCROSS อนุญาตให้ใช้พารามิเตอร์เพิ่มเติมสองพารามิเตอร์:

- MVXReference: พารามิเตอร์นี้ระบุว่าการสมัครสมาชิกควรใช้การอ้างอิงที่อ่อนแอหรือแข็งแกร่ง การอ้างอิงที่อ่อนแอ (`mvxreference.weak`) อนุญาตให้ผู้รวบรวมขยะลบการสมัครสมาชิกหากสมาชิกไม่ได้อ้างอิงอีกต่อไปในขณะที่การอ้างอิงที่แข็งแกร่ง (` mvxreference.strong`) ป้องกันสิ่งนี้

- แท็ก: แท็กสตริงเสริมสามารถให้เพื่อจัดหมวดหมู่การสมัครสมาชิก สิ่งนี้มีประโยชน์สำหรับการจัดการการสมัครสมาชิกหลายครั้งหรือเพื่อวัตถุประสงค์ในการกรอง

โดยสรุปกลไกการสมัครสมาชิกเหตุการณ์ของ MVVMcross ให้ตัวเลือกการจัดการเธรดที่ยืดหยุ่นช่วยให้นักพัฒนาเลือกวิธีการส่งข้อความตามความต้องการของแอปพลิเคชันเฉพาะของพวกเขา ความยืดหยุ่นนี้เป็นสิ่งสำคัญสำหรับการรักษา UIs ที่ตอบสนองและจัดการงานพื้นหลังได้อย่างมีประสิทธิภาพ

การอ้างอิง:
[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-when-to-use-observableCollection-in-mvmcross
[4] https://www.youtube.com/watch?v=HQDVRWZKIK
[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