حالة النشاط

الإعلانات

التعامل مع تغييرات حالة النشاط

 

 

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

تصف هذه الوثيقة بعض الحالات الشائعة، التي تحدث فيها مثل هذه التحولات، وكيفية التعامل مع تلك التحولات.

لمزيد من المعلومات حول حالات النشاط، راجع فهم دورة حياة النشاط. للتعرف على كيفية مساعدة فئة ViewModel لك في إدارة دورة حياة النشاط ، راجع فهم فئة ViewModel.

 

 

 

 

حدوث تغيير التكوين


هناك عدد من الأحداث التي يمكن أن تؤدي إلى تغيير التكوين. ولعل المثال الأبرز هو التغيير بين الإتجاهين العمودي والأفقي.

الحالات الأخرى التي يمكن أن تؤدي إلى تغييرات في التكوين تشمل التغييرات في اللغة أو جهاز الإدخال.

عند حدوث تغيير في التكوين، يتم إتلاف النشاط وإعادة إنشائه. يحتوي مثيل النشاط الأصلي على إستدعاءات:

()onPause() ، onStop ، و ()onDestroy

التي تم تشغيلها. سيتم إنشاء مثيل جديد للنشاط ويتم تشغيل الإستدعاءات ()onCreate و ()onStart و ()onResume .

إستخدم مزيجاً من ViewModels ، و دالة ()onSaveInstanceState ، و / أو التخزين المحلي المستمر للحفاظ..

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

وحالات الإستخدام لتطبيقك، والأخذ في الإعتبار سرعة الإسترداد مقابل إستخدام الذاكرة.

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

 

 

 

 

 

التعامل مع حالات تعدد النوافذ

عندما يدخل أحد التطبيقات في وضع تعدد النوافذ ، متوفر في أندرويد 7.0 (مستوى واجهة برمجة التطبيقات 24) وأعلى..

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

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

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

لمزيد من المعلومات حول دورة حياة تعدد النوافذ، راجع قسم دورة حياة تعدد النوافذ في صفحة الدعم متعدد النوافذ.

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

يكون هذا النشاط في حالة إستئناف، بينما يكون التطبيق في النافذة الأخرى، في حالة الإيقاف المؤقت.

عندما يقوم المستخدم بالتبديل من التطبيق A إلى التطبيق B، يقوم النظام بإستدعاء ()onPause على التطبيق A و ()onResume على التطبيق B.

يقوم بالتبديل بين هاتين الدالتين في كل مرة يقوم فيها المستخدم بالتبديل بين التطبيقات.

لمزيد من التفاصيل حول النوافذ المتعددة، اقرأ دعم النوافذ المتعددة.

 

 

 

 

 

 

النشاط أو مربع الحوار يظهر في المقدمة

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

يفقد النشاط المغطى التركيز، ويدخل في حالة الإيقاف المؤقت. ثم يقوم النظام بإستدعاء ()onPause عليه.

عندما يعود النشاط المغطى إلى المقدمة، ويستعيد التركيز، فإنه يستدعي ()onResume.

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

فإن النشاط المغطى يفقد التركيز ويدخل في حالة التوقف. يقوم النظام، في تتابع سريع، بإستدعاء ()onPause و ()onStop .

عندما يعود نفس مثيل النشاط المغطى إلى المقدمة، يقوم النظام بإستدعاء ()onRestart و ()onStart و ()onResume على النشاط.

إذا كان مثيل جديد للنشاط المغطى الذي أتى إلى الخلفية، لا يقوم النظام بإستدعاء ()onRestart ، فقط يستدعي ()onStart و ()onResume .

 

ملاحظة: عندما ينقر المستخدم على زر “نظرة عامة” أو “الصفحة الرئيسية”، يتصرف النظام كما لو كان النشاط الحالي مغطى بالكامل.

 

 

 

 

 

ينقر المستخدم على زر الرجوع


إذا كان هناك نشاط في المقدمة، وقام المستخدم بالنقر فوق زر الرجوع، فسيتم تنقل النشاط خلال عمليات الإستدعاء:

()onPause و ()onStop و ()onDestroy . بالإضافة إلى تدميره، يتم إزالة النشاط أيضاً من الكومة الخلفية.

من المهم ملاحظة أنه، بشكلٍ إفتراضي، لا يتم تشغيل إستدعاء ()onSaveInstanceState في هذه الحالة. التعامل مع تغييرات حالة

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

ومع ذلك، يمكنك تجاوز دالة ()onBackPressed لتنفيذ بعض السلوك المخصص، على سبيل المثال مربع الحوار “تأكيد – إنهاء”.

إذا قمت بتجاوز دالة ()onBackPressed ، ما زلنا نوصيك بشدة بإستدعاء ()super.onBackPressed من الدالة التي تم تجاوزها.

وإلا فقد يكون سلوك “زر الرجوع” مزعجاً للمستخدم. التعامل مع تغييرات حالة التعامل مع تغييرات حالة

 

 

 

 

النظام يقتل عملية التطبيق


إذا كان التطبيق في الخلفية، ويحتاج النظام إلى تحرير ذاكرة إضافية لتطبيق أمامي، يمكن قتل تطبيق الخلفية من قبل النظام، لتحرير المزيد من الذاكرة.

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

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

 


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

الإعلانات