تكرار السؤال: …
الإجابة المختصرة
تخزن وتسترجع الحالة الخفيفة الأساسية للـ ViewModel (كالمعرفات ونصوص البحث) تلقائيًا عند إنهاء النظام لعملية التطبيق في الخلفية، وتعمل كـ Map مفتاح-قيمة مدمج مع StateFlow.
الشرح
بينما يحمي الـ ViewModel من دوران الشاشة، فإنه لا يحمي من قتل النظام للعملية بالكامل لتوفير الذاكرة. يحقن Hilt تلقائيًا SavedStateHandle في ViewModel، وتتيح قراءة معاملات الـ Navigation وحفظ الحالات الخفيفة عبر دالة getStateFlow()، فتستعاد تلقائيًا وبسلاسة بمجرد إعادة تشغيل الشاشة.
مثال بالكود
class DetailViewModel(
private val savedStateHandle: SavedStateHandle
) : ViewModel() {
// قراءة معامل مرسل عبر Navigation Component:
val userId: String = checkNotNull(savedStateHandle["userId"])
// تحويل القيمة لتدفق متفاعل:
val query: StateFlow<String> = savedStateHandle.getStateFlow("query", "")
fun updateQuery(newQuery: String) {
savedStateHandle["query"] = newQuery
}
}أخطاء شائعة
- تخزين كائنات معقدة أو قوائم ضخمة في SavedStateHandle، مما يتجاوز حد الـ 1MB المسموح به لنظام Binder.