تكرار السؤال: …
الإجابة المختصرة
إغلاق المستخدم ينهي الـ Activity ويمسح كائناتها وحالتها بإرادته، بينما موت العملية يحدث قسرًا بواسطة النظام لتفريغ الذاكرة مع حفظ الـ SavedState لاستعادتها لاحقًا.
الشرح
عندما يكون التطبيق في الخلفية، قد يقرر الـ Low Memory Killer (LMK) قتل عملية التطبيق بالكامل لتحرير RAM لتطبيق نشط آخر. عند عودة المستخدم، ينشئ النظام عملية جديدة تمامًا وتكون كائنات الـ Singleton والـ ViewModel القديمة ممسوحة من الذاكرة، ويقوم النظام فقط بتمرير الـ Bundle المحفوظة إلى onCreate و SavedStateHandle لإعادة بناء الحالة.
مثال بالكود
// اختبار موت العملية عبر adb:
// adb shell am kill com.example.app
class ProfileViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
// يستعيد المعرف بأمان حتى بعد Process Death
val userId: StateFlow<String> = savedStateHandle.getStateFlow("user_id", "")
}أخطاء شائعة
- الاعتماد الكامل على المتغيرات الثابتة (Static Singletons) أو الـ In-Memory Cache وافتراض بقائها حية دائمًا أثناء تنقل المستخدم.
- عدم اختبار سلوك التطبيق تحت سيناريو Process Death مما يؤدي لكراشات مفاجئة بسبب Null Pointer عند إعادة الدخول.