MVVMCROSS จัดการสถานการณ์หน่วยความจำต่ำบนแพลตฟอร์มที่แตกต่างกันโดยการจัดหากลไกในการบันทึกและกู้คืนสถานะของ ViewModels ซึ่งเป็นสิ่งสำคัญสำหรับการรักษาเสถียรภาพของแอปพลิเคชันเมื่อหน่วยความจำมี จำกัด นี่คือวิธีจัดการสถานการณ์เหล่านี้ในแพลตฟอร์มต่างๆ:
ภาพรวมของ mvvmcross
MVVMCROSS เป็นเฟรมเวิร์ก MVVM ข้ามแพลตฟอร์มที่รองรับ Windows Phone, Windows 8, iOS, Android และ WPF ช่วยให้นักพัฒนาสามารถใช้รูปแบบ MVVM ในแพลตฟอร์มเหล่านี้อำนวยความสะดวกในการเชื่อมโยงข้อมูลและการแยกข้อกังวล [2] [5] เฟรมเวิร์กใช้ไลบรารีคลาสแบบพกพา (PCL) ไปยังบ้าน ViewModels ทำให้สามารถแชร์ได้ในแพลตฟอร์มที่แตกต่างกัน [5]
การจัดการสถานการณ์หน่วยความจำต่ำ
Android **
บน Android MVVMcross เผชิญกับความท้าทายเนื่องจากการจัดการวงจรชีวิตและหน่วยความจำของแพลตฟอร์ม วงจรชีวิตของ Android สามารถนำไปสู่สถานการณ์ที่ ViewModels ไม่ได้ถูกกำจัดทันทีหลังจากที่มุมมองที่เกี่ยวข้องถูกทำลาย นี่เป็นเพราะคอลเลกชันขยะของซามารินอาจไม่เกิดขึ้นทันทีโดยเฉพาะอย่างยิ่งหากการใช้หน่วยความจำไม่สูง [4] ในการจัดการสิ่งนี้นักพัฒนาสามารถใช้กิจกรรมเช่น `viewappearing` และ` viewdisappearing` เพื่อยกเลิกการสมัครจากข้อความและตรวจสอบให้แน่ใจว่ามีเพียงอินสแตนซ์ที่จำเป็นของ ViewModels เท่านั้นที่ยังคงทำงานอยู่ [4]
ios **
ในขณะที่ MVVMCROSS ไม่ได้จัดการคำเตือนหน่วยความจำต่ำเฉพาะ iOS โดยตรง แต่นักพัฒนาสามารถใช้โซลูชันเฉพาะแพลตฟอร์ม ตัวอย่างเช่นในแอพ. NET MAUI (ซึ่งคล้ายกันในแนวคิดในการข้ามแพลตฟอร์มเช่น MVVMCROSS) คุณสามารถแทนที่ `ApplicationDidReceiveMemorsWarning` ในแอพเพื่อทำความสะอาดทรัพยากร [3] อย่างไรก็ตาม MVVMcross นั้นไม่ได้ให้กลไกในตัวสำหรับจัดการคำเตือนเหล่านี้เกี่ยวกับ iOS
Windows Phone และแพลตฟอร์มอื่น ๆ **
สำหรับ Windows Phone และแพลตฟอร์มอื่น ๆ MVVMCROSS ให้วิธีการทั่วไปในการจัดการหน่วยความจำโดยอนุญาตให้นักพัฒนาตรวจสอบเหตุการณ์ระดับหน้าเช่น `onNavigatedto` และ` onnavigated จาก เหตุการณ์เหล่านี้สามารถใช้เพื่อใช้ตรรกะที่กำหนดเองสำหรับการปลดปล่อยทรัพยากรเมื่อจำเป็น [8]
การบันทึกและกู้คืนสถานะ ViewModel
MVVMCROSS จัดเตรียมวิธีการที่เรียกว่า `SavestatetetObundle` ในคลาส` MVXViewModel` ซึ่งช่วยให้นักพัฒนาสามารถบันทึกสถานะของ ViewModels ของพวกเขาเมื่อแอปเป็น Tombstoned หรือเผชิญกับสถานการณ์หน่วยความจำต่ำ สถานะนี้สามารถกู้คืนได้ในภายหลังเมื่อแอปดำเนินการต่อเพื่อให้มั่นใจว่าความคืบหน้าของผู้ใช้จะได้รับการเก็บรักษาไว้ [1] คุณสมบัตินี้มีประโยชน์อย่างยิ่งบนแพลตฟอร์มเช่น Android ซึ่งสถานะของแอพอาจถูกบันทึกและกู้คืนบ่อยครั้งเนื่องจากข้อ จำกัด ของหน่วยความจำ
โดยสรุปในขณะที่ MVVMcross ไม่ได้ให้กลไกการจัดการหน่วยความจำต่ำเฉพาะแพลตฟอร์มสำหรับทุกแพลตฟอร์ม แต่มีเครื่องมือในการจัดการสถานะ ViewModel และให้กรอบการทำงานที่ช่วยให้นักพัฒนาสามารถใช้โซลูชันที่กำหนดเองตามความต้องการเฉพาะของแต่ละแพลตฟอร์ม
การอ้างอิง:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[3] https://learn.microsoft.com/en-us/answers/questions/1360447/net-maui-how-do-you-process-low-memory-notificatio
[4] https://stackoverflow.com/questions/54040726/mvvmcross-android-appears-to-be-keep-hoade-hold-of-viewmodels และ never-disposing-w
[5] https://leaware.com/creating-cross-platform-xamarin-applications-using-the-mvvmcross-framework/
[6] https://stackoverflow.com/questions/32220007/what-does-mvvmcross-do-that-xamarin-doesnt-already
[7] https://www.reddit.com/r/dotnetmaui/comments/1c1qlou/maui_memory_leaks/
[8] https://stackoverflow.com/q/19817284
[9] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[10] https://www.hasaltaiar.com.au/a-journey-of-hunting-memory-leaks-in-xamarin-2/