التعامل مع تغييرات التكوين

الإعلانات

التعامل مع تغييرات التكوين

 

 

التعامل مع تغييرات التكوين

يمكن تغيير بعض تكوينات الجهاز، أثناء وقت التشغيل (مثل اتجاه الشاشة، توفر لوحة المفاتيح، وعندما يقوم المستخدم بتمكين وضع تعدد النوافذ). التعامل مع تغييرات التكوين .

عند حدوث مثل هذه التغييرات، يعيد الأندرويد تشغيل النشاط بإستدعاء ()onDestroy متبوعة بـ ()onCreate.

سلوك إعادة التشغيل تم تصميمه لمساعدة تطبيقك، على التكيف مع عمليات التكوين الجديدة عن طريق إعادة تحميل التطبيق تلقائياً.

بإستخدام مصادر بديلة تتطابق مع التكوين الجديد للجهاز.

لمعالجة إعادة التشغيل بشكل صحيح، من المهم أن يستعيد نشاطك حالته السابقة.

يمكنك إستخدام مزيج من ()onSaveInstanceState، كائنات ViewModel، والتخزين المستمر لحفظ وإستعادة حالة واجهة المستخدم لنشاطك خلال تغييرات التكوين.

لمزيد من المعلومات حول كيفية حفظ حالة نشاطك، اقرأ حفظ حالات واجهة المستخدم.

لإختبار أن تطبيقك، يقوم بإعادة تشغيل نفسه بحالة سليمه، يجب عليك إستدعاء تغييرات التكوين، مثل (تغيير إتجاه الشاشة) أثناء تنفيذ مهام مختلفة في تطبيقك.

يجب أن يكون تطبيقك، قادراً على إعادة التشغيل في أي وقت دون فقدان حالة أو بيانات المستخدم.

من أجل التعامل مع أحداث مثل، تغييرات التكوين أو عندما يتلقى المستخدم إتصالاً هاتفياً.

ثم يعود إلى تطبيقك بعد مضي وقت كافي لحصول عملية تدمير التطبيق. لمعرفة كيفية إستعادة حالة نشاطك، اقرأ عن دورة حياة النشاط.

مع ذلك، قد تواجه موقفاً قد تواجه موقف تكون فيه إعادة تشغيل تطبيقك، وإستعادة كميات كبيرة من البيانات، مكلفاً وقد يؤدي إلى تجربة سيئة للمستخدم.

 

في مثل هذه الحالة يكون لديك خيارين آخرين:

 

1- الإحتفاظ بكائن أثناء عملية تغيير التكوين

بالسماح لنشاطك بإعادة التشغيل، عند تغير أحد التكوينات، ولكن بحمل كائن حر “stateful” للنموذج الجديد لنشاطك.

 

2- التعامل مع تغييرات التكوين بنفسك

لا يوصى بالتعامل مع تغييرات التكوين بنفسك، بسبب التعقيد الخفي للتعامل مع تغييرات التكوين.

ومع ذلك، إذا كنت غير قادر على الحفاظ على حالة واجهة مستخدمك، بإستخدام الخيارات المفضله (onSaveInstanceState(), ViewModels والحفظ المستمر).

يمكنك بدلاً من ذلك، منع النظام من إعادة تشغيل نشاطك أثناء حدوث تغييرات في التكوين.

سيتلقى تطبيقك إستدعاء عندما يتغير التكوين بحيث يمكنك تحديث نشاطك يدوياً عند الضرورة.

 

 

 

 

الإحتفاظ بكائن أثناء تغيير التكوين


إذا تطلبت عملية إعادة تشغيل نشاطك استعادة مجموعة كبيرة من البيانات، أو إعادة تأسيس اتصال بالشبكة، أو إجراء عمليات دقيقة أخرى.

عندها قد تكون إعادة التشغيل الكاملة بسبب حدوث تغيير في أحد التكوينات تجربة بطيئة للمستخدم.

أيضاً، قد لا يكون من الممكن أن تستعيد حالة نشاطك بالكامل، بوجود الحزمة التي يحتفظ بها النظام من أجلك.

مع إستدعاء ()onSaveInstanceState فهو ليس مصمماً لحمل كائنات كبيرة مثل (الصور النقطيه).

والبيانات التي بداخله يجب أن تكون، متسلسله ثم غير متسلسله في السلسلة الرئيسية، والتي يمكن أن تستهلك الكثير من الذاكرة وتجعل تغيير التكوين بطيئاً.

في مثل هذه الحاله، يمكنك تخفيف عبء إعادة تهيئة جزء من نشاطك، بإستخدام الكائن ViewModel.

الذي يتم الإحتفاظ به عبر تغييرات التكوين، لذا فهي المكان المثالي للحفاظ على بيانات واجهة مستخدمك، دون الحاجة للإستعلام عنهم مجدداً.

لمزيد من المعلومات حول إستخدام ViewModels في تطبيقاتك، راجع دليل ViewModels.

 

 

 

 

 

التعامل مع تغييرات التكوين بنفسك


إذا كان تطبيقك، لا يحتاج إلى تحديث مصادره أثناء تغيير تكوين محدد، ولديك قيود أداء تتطلب منك تجنب إعادة تشغيل النشاط.

فيمكنك إذاً الإعلان أن نشاطك، يتعامل مع تغير التكوينات بنفسه مما يمنع النظام من، إعادة تشغيل نشاطك.

 تحذير: قد يؤدي التعامل مع تغير التكوينات بنفسك إلى زيادة صعوبة إستخدام المصادر البديله، لأن النظام لن يقوم بتطبيقهم تلقائياً نيابة عنك.

يجب أن تعتبر هذه التقنية الملاذ الأخير عندما ترغب في تجنب إعادة التشغيل من أجل تغير تكوين ما، ولا ينصح بإستخدام هذه التقنية في معظم التطبيقات.

للإعلان أن نشاطك يتعامل مع تغير التكوينات بنفسه، قم بتحرير عنصر النشاط الملائم في ملف الإيضاح، الخاص بك لإضافة السمه android:configChanges ، مع القيمة التي توضح التكوين الذي ترغب في التعامل معه.

يتم إدراج القيم المحتملة في وثائق للسمة android:configChanges. القيم الأكثر إستخداماً هي: “الإتجاه”، “حجم الشاشة” و “لوحة المفاتيح”.

قيمة “الإتجاه” تمنع إعادة التشغيل عند تغير إتجاه الشاشه.

و قيمة “حجم الشاشة” تمنع أيضاً إعادة التشغيل عند تغير الإتجاه، ولكن بدءاً من نسخة الأندرويد 3.2 API 13.

إذا كنت ترغب في التعامل، مع تغييرات التكوين في تطبيقك يدوياً، فيجب عليك الإعلان عن قيم كلٍ من “الإتجاه” و “حجم الشاشة”، في سمات android:configChanges.

قيمة “إخفاء لوحة المفاتيح”.

تمنع عملية إعادة التشغيل عند تغير إتاحة لوحة المفاتيح. يمكنك الإعلان عن قيم تكوينات متعددة، في السمة عن طريق الفصل بينها بالرمز “|”.

 

مثال، يعلن كود ملف الإيضاح التالي عن نشاط يتعامل مع كلٍ من تغير إتجاه الشاشة و تغير إتاحة لوحة المفاتيح:

 

 

 

الآن، عند تغير أحدى هذه التكوينات، لا تتم إعادة تشغيل MyActivity . بدلاً من ذلك، يتلقى نشاطي MyActivity ، إستدعاء للدالة ()onConfigurationChanged.

هذه الداله تقوم بتمرير كائن التكوين، الذي يحدد التكوين الجديد للجهاز.

من خلال قراءة الحقول في التكوين، يمكنك تحديد التكوين الجديد، وإجراء التغييرات المناسبة عن طريق تحديث المصادر المستخدمة في واجهتك.

بحلول هذا الوقت، يكون قد تم إستدعاء هذه الداله، وتم تحديث كائن مصادر نشاطك، ليقوم بإسترجاع المصادر بناءً على التكوين الجديد.

لتتمكن بسهولة من إعادة تعيين عناصر واجهة مستخدمك، بدون قيام النظام بإعادة تشغيل نشاطك.

مثال، الإجراء التالي ()onConfigurationChanged ، يتحقق من الإتجاه الحالي للجهاز:

 

 

 

 

 

كائن التكوين، يستعرض جميع التكوينات الحاليه، ليس فقط التي تم تغييرها. غالباً، لن تهتم بتفاصيل كيفية تغير التكوينات.

و يمكنك ببساطة إعادة تعيين جميع مصادرك، التي توفر بدائل للتكوينات التي تتعامل معها.

مثال

بسبب مصدر الكائن الذي تم تحديثه الآن، يمكنك إعادة تعيين أي ImageViews مع ()setImageResource .

و إستخدام المصادر الملائمة للتكوين الجديد (كما هو موضح في، توفير المصادر).

لاحظ أن قيم حقول التكوين عبارة عن، أعداد صحيحة متطابقة مع ثوابت معينه من فئة التكوين.

للحصول على وثائق، عن الثوابت التي يجب إستخدامها مع كل حقل، أنظر إلى الحقل المناسب في مراجع التكوين.

 تذكر: عندما تعلن نشاطك ليتعامل مع تغييرات التكوين، تكون مسؤولاُ عن إعادة تعيين أي عناصر لأي بدائل قمت بتوفيرها. 

إذا قمت بإعلان نشاطك للتعامل مع تغير الإتجاه ولديك الصور التي يجب أن تستبدل بين الإتجاهين الأفقي والعمودي، فيجب عليك إعادة تعيين كل

مصدر لكل عنصر خلال عملبة تغيير التكوين ()onConfigurationChanged.

إذا لم تكن بحاجة إلى تحديث تطبيقك، بناءً على تغييرات التكوين هذه، فيمكنك بدلاً من ذلك عدم تطبيق الداله ()onConfigurationChanged.

في هذه الحاله، كل المصادر المستخدمة قبل تغير التكوين، لا تزال مستخدمة وأنت قمت فقط بتجنب عملية إعادة تشغيل نشاطك.

مع ذلك، يجب أن يكون تطبيقك، قادراً دائماً على الإيقاف ثم إعادة التشغيل، إلى حالته السابقه بشكلٍ سليم.

لذلك يجب عليك عدم إعتبار هذه التقنية، هروباً من الإحتفاظ بحالتك أثناء دورة حياة النشاط العادية.

ليس فقط لوجود تغييرات تكوين أخرى، لا يمكنك منعها من إعادة تشغيل تطبيقك.

بل أيضاً، لأنه يجب عليك التعامل مع الأحداث مثل، عندما يغادر المستخدم تطبيقك ثم يتم تدميره قبل عودة المستخدم إليه ” تسجيل الدخول “.

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات