rememberSaveable
حافظ على الحالة عبر تغييرات الإعدادات
rememberSaveable درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.
مشكلة remember
تبقى remember عبر إعادة التركيب، لكنها لا تبقى عبر تغييرات الإعدادات مثل تدوير الشاشة. عند إعادة إنشاء النشاط، تُفقد الحالة التي حفظتها ويُعاد ضبطها إلى قيمتها الأولية.
ظهور rememberSaveable
تعمل rememberSaveable مثل remember، لكنها تحفظ القيمة عبر تغييرات الإعدادات وإنهاء العملية، ثم تستعيدها.
var count by rememberSaveable { mutableStateOf(0) }مثال على التدوير
باستخدام remember العادية، يؤدي تدوير الهاتف إلى إعادة ضبط العدّاد إلى 0. أما باستخدام rememberSaveable، فتبقى القيمة محفوظة أثناء التدوير.
آلية الحفظ
في الخلفية، تخزّن rememberSaveable القيمة في حزمة حالة المثيل المحفوظ الخاصة بالنشاط، وهي الآلية نفسها التي كان نظام View القديم يستخدمها مع onSaveInstanceState.
الأنواع المدعومة
تحفظ تلقائيًا الأنواع التي يمكن وضعها في Bundle: الأنواع البدائية وString وكائنات Parcelable. أما الأنواع المخصصة فتحتاج إلى بعض العمل الإضافي.
إنهاء العملية
إذا أنهى Android تطبيقكم في الخلفية لاستعادة الذاكرة، ثم عاد المستخدم، فستستعيد rememberSaveable الحالة المحفوظة، بحيث تظهر الشاشة كما تركها المستخدم.
حافظات مخصصة
بالنسبة إلى نوع لا يمكن حفظه تلقائيًا، وفّروا Saver يحوّله من وإلى صيغة قابلة للحفظ. يوفّر Compose مساعدين مثل listSaver وmapSaver.
val saver = listSaver<MyState, Any>(
save = { listOf(it.a, it.b) },
restore = { MyState(it[0] as Int, it[1] as String) }
)استخدام حافظ مخصص
مرّروا الحافظ إلى rememberSaveable عبر معامله saver حتى يعرف Compose كيفية حفظ نوعكم بشكل دائم.
var state by rememberSaveable(stateSaver = saver) {
mutableStateOf(MyState(0, ""))
}متى نستخدم كلًا منهما؟
استخدموا rememberSaveable للحالة التي سينزعج المستخدم من فقدانها عند التدوير — مثل إدخال النموذج وموضع التمرير وعلامة التبويب المحددة. واستخدموا remember العادية لحالة واجهة المستخدم المؤقتة التي لا بأس بإعادة ضبطها.
ليست للبيانات الكبيرة
حزمة الحفظ صغيرة. لا تخزّنوا بيانات كبيرة (مثل الصور النقطية والقوائم الطويلة) في rememberSaveable. احتفظوا بالبيانات الثقيلة في ViewModel أو مستودع، واحفظوا المعرّفات الصغيرة فقط.
تجميع العناصر معًا
حقل نموذج يبقى محفوظًا عند تدوير الشاشة بفضل rememberSaveable.
@Composable
fun LoginField() {
var email by rememberSaveable { mutableStateOf("") }
TextField(
value = email,
onValueChange = { email = it }
)
}تحقق سريع
ما الذي يفعله rememberSaveable ولا يفعله remember؟
مراجعة
rememberSaveable:
- يبقى محفوظًا عند تدوير الشاشة وموت العملية، وليس عند إعادة التركيب فقط.
- يحفظ تلقائيًا الأنواع البدائية و
StringوParcelable. - استخدم Saver للأنواع المخصصة.
- احرص على أن تكون البيانات المحفوظة صغيرة؛ فالبيانات الكبيرة مكانها في ViewModel.
الأسئلة الشائعة
هل درس «rememberSaveable» مجاني؟
نعم — نص درس «rememberSaveable» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.
ماذا ستتعلم في «rememberSaveable»؟
حافظ على الحالة عبر تغييرات الإعدادات تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟
لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «rememberSaveable»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟
نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.