تكرار السؤال: …
الإجابة المختصرة
يقوم النظام بإعادة إنشاء الـ Activity بالكامل؛ ونحافظ على البيانات غير العابرة عبر ViewModel والحالة الخفيفة الأساسية (كالمعرفات ونصوص الإدخال) عبر SavedStateHandle أو onSaveInstanceState لتنجو من موت العملية.
الشرح
أثناء تغيير اللغة أو دوران الشاشة، تُدمج الموارد الجديدة بإعادة بناء الـ Activity (تستدعى onDestroy ثم onCreate). يحتفظ ViewModel بالبيانات الثقيلة وحالات الشاشة طالما أن الـ Activity لم تُغلق عمدًا، بينما يُستخدم onSaveInstanceState أو SavedStateHandle لحفظ البيانات النصية ومعرفات العناصر الخفيفة التي تكفي لإعادة بناء الشاشة عند موت العملية.
مثال بالكود
class DetailViewModel(
private val savedStateHandle: SavedStateHandle
) : ViewModel() {
// يستعيد المعرف حتى بعد قتل النظام للتطبيق
val itemId: String = checkNotNull(savedStateHandle["item_id"])
}أخطاء شائعة
- محاولة تخزين كائنات ضخمة أو Bitmap داخل onSaveInstanceState Bundle، مما يسبب TransactionTooLargeException.
- استخدام android:configChanges في الـ Manifest للهروب من معالجة إعادة بناء الشاشة بشكل صحيح.