Tombstoning trong MVVMCROSS đề cập đến quá trình lưu và khôi phục trạng thái của một chế độ xem khi ứng dụng bị treo hoặc chấm dứt do điều kiện bộ nhớ thấp, một kịch bản phổ biến trong các nền tảng di động như Windows Phone và Android. MVVMCROSS cung cấp các cơ chế để xử lý quá trình này một cách hiệu quả.
Xây dựng và vòng đời
Các chế độ xem MVVMCROSS được khởi tạo bằng cách sử dụng thùng chứa IOC, tiêm các phụ thuộc vào ViewModel. Vòng đời của ViewModel trong MVVMCROSS bao gồm một số phương pháp chính:
- Xây dựng: ViewModel được tạo ra với các phụ thuộc được tiêm qua thùng chứa IOC.
- init (): Khởi tạo chế độ xem với các tham số điều hướng.
- ReloadState (): Phục hồi trạng thái của ViewModel sau khi Tombstoning.
- start (): được gọi là khi khởi tạo và bù nước hoàn tất [3].
Lưu trạng thái
Khi một ứng dụng được nhấn mạnh, MVVMCROSS gọi phương thức `SaveStatetObundle 'trên ViewModel. Phương pháp này cho phép bạn lưu trạng thái của ViewModel bằng cách lưu trữ dữ liệu trong một `imvxbundle`. Nên sử dụng tuần tự hóa JSON để lưu trữ dữ liệu phức tạp [1].
Phục hồi trạng thái
Sau khi ứng dụng được kích hoạt lại, MVVMCROSS cố gắng khôi phục trạng thái của ViewModel. Tuy nhiên, phương pháp chính xác để khôi phục trạng thái có thể thay đổi tùy thuộc vào nền tảng và phiên bản của MVVMcross. Nói chung, phương thức `readoadState` được sử dụng để bù nước viewmodel với trạng thái đã lưu [3].
Cân nhắc cụ thể về nền tảng
Mỗi nền tảng được hỗ trợ bởi MVVMcross xử lý Tombstoning khác nhau:
- Windows Phone: Tombstoning được xử lý thông qua các sự kiện trang như `onnavigatedto` và` onNavigatedFrom`. MVVMcross cung cấp các cơ chế để lưu và khôi phục trạng thái trong các sự kiện này, nhưng nó có thể yêu cầu thiết lập bổ sung để đảm bảo phục hồi trạng thái thích hợp [4] [5].
- Android: MVVMcross xử lý Tombstoning bằng cách lưu và khôi phục trạng thái ViewModel khi ứng dụng bị tạm dừng hoặc nối lại. Tuy nhiên, các vấn đề có thể phát sinh nếu BackStack bị xóa hoặc nếu các tham số điều hướng không được lưu đúng [6].
Những thách thức và giải pháp
Xử lý Tombstoning trong MVVMcross có thể là một thách thức, đặc biệt là khi điều hướng với các tham số. Điều quan trọng là lưu các tham số điều hướng cùng với trạng thái ViewModel để đảm bảo khôi phục chính xác trạng thái của ứng dụng [6] [9]. Ngoài ra, sử dụng các thư viện trợ giúp hoặc các giải pháp tùy chỉnh có thể đơn giản hóa quá trình lưu và khôi phục trạng thái trên các nền tảng khác nhau [5] [8].
Tóm lại, MVVMCROSS cung cấp một khung mạnh mẽ để xử lý Tombstoning bằng cách lưu và khôi phục trạng thái ViewModel. Tuy nhiên, nó đòi hỏi phải thực hiện cẩn thận và xem xét các sắc thái cụ thể của nền tảng để đảm bảo phục hồi ứng dụng liền mạch.
Trích dẫn:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://www.mvvmcross.com/mvvmcross-51-release/
[3] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[4] https://stackoverflow.com/questions/16023307/mvvmcross-and-tombstoning
.
[6] https://github.com/mvvmcross/mvvmcross/issues/834
[7] https://github.com/mvvmcross/mvvmcross/blob/develop/changelog.md
[8] https://jesseliberty.com/2011/04/08/tombstoning-and-mvvm/
[9] https://github.com/mvvmcross/mvvmcross/issues/2458
[10] https://www.mvvmcross.com/mvvmcross-56-release/