سلسلة تعلم الأندرويد – الحلقة السابعة: دور حياة النشاط

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

نظرة عامة:

يتألف التطبيق من نشاطات مختلفة تتصل فيما بينها بالقادح أو الزناد (Intent). عندما يتم الإنتقال من نشاط إلى آخر يقوم الأندرويد بوضع النشاط السابقة في متراصّة (Stack) شبيهة بوظيفة “الرجوع” في متصفحات الأنترنت. عند الضغط على زر الخلف في الأجهزة التي تعمل بالأندرويد يقوم الأندرويد بإرجاعك إلى النشاط السابق. هذه النقطة مهمة في معرفة دورة حياة التطبيق (Activity Life-cycle).

نظرة أقرب:

الصورة التالية تمثل رسماً يوضح حياة النشاط منذ بدايته مروراً بعرضه للمستخدم وحتى انتهائه.

Activity Lifecycle

هناك ثلاثة دورات في هذه الصورة:

  • الدورة الكاملة لحياة التطبيق Entire Lifetime، وهي التي تحصل بين onCreate(Bundle) وبين onDestroy(). يمكن القيام بتجهيز المتغيرات والكائنات في دالة onCreate() وإنهاؤها في onDestory().
  • الدورة المنظورة Visible Lifetime، وهي التي تكون  في هذه الدورة يمكن للمستخدم أن يرى النشاط وربما يكون النشاط في الخلفية وليس في الواجهة أي لا يمكن التفاعل معه. فمثلاً عندما تظهر رسالة تحذير للمستخدم يكون النشاط مرئياً ولكن في الخلفية لتكون رسالة التحذير في الأمام. تكون هذه الدورة بين onStart() وبين onStop(). وفي هاتين الدالتين يمكن التحكم بما سوف يعرض للمستخدم في النشاط. يتم استدعاء هاتين الدالتين أكثر من مرة (في حالة تم الانتقال من نشاط أ إلى ب ومن ثم العودة إلى أ).
  • الدورة الأمامية Foreground Lifetime. هذه الدورة تكون بين الدالتين onResume() وonPause() ويمكن للمستخدم التفاعل مع النشاط بشكل طبيعي. يستعمل النشاط هاتين الدالتين بكثرة (كأن يدخل الجهاز وضع الاستعداد) ولذلك يجب مراعاة هذا الأمر عند إضافة أوامر لهاتين الدالتين في النشاط.

وبشكل عام يتألف النشاط من هذه الدوال، والتي يمكن استعمالها في كلاس فرعي تابع للكلاس Activity وكتابة ما تريد من أوامر:

public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);

protected void onStart();

protected void onRestart();

protected void onResume();

protected void onPause();

protected void onStop();

protected void onDestroy();
}
تفصيل أكثر:
وهذا شرح للدوال المذكورة للتعرف عن قرب على طبيعة عملها وكيفية إتصال كل منها بالأخرى:

الدالة

الوصف

التالي

onCreate()

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

تُتبع دائماً بـ  onStart()

onStart()


onRestart()

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

تُتبع دائماً بـ  onStart()

onStart()


onStart()

يتم استدعاء هذه الدالة عندما يكون النشاط منظوراً للمستخدم.

تُتبع بـ onResume() إذا أصبح النشاط في مقدمة المتراصّة، أو onStop() إذا تم إخفاء النشاط.

onResume() أو  onStop()


onResume()

يتم استدعاء هذه الدالة عندما يكون النشاط جاهزاً لاستقبال أوامر المستخدم. يكون النشاط في هذه الدالة في مقدمة المتراصّة ويمكن للمستخدم التفاعل معه.

تُتبع دائماً بـ  onPause()

onPause()


onPause()

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

تُتبع دائماً بـ  onResume() إذا أصبح النشاط في مقدمة المتراصة، أو onStop() إذا تم إيقاف النشاط.

onResume() أو  onStop()


onStop()

يتم استدعاء هذه الدالة عندما يختفي النشاط ويحل محله نشاط آخر. يحصل هذا عندما يتم الانتقال إلى نشاط آخر، أو العودة إلى نشاط سابق أو يتم إيقاف النشاط الحالي.

تُتبع دئماً بـ  onRestart() إذا كان النشاط يظهر للمستخدم، أو onDestory() إذا يتم إيقاف النشاط.

onRestart()  أو  onDestory()


onDestory()

تستدعى هذه الدالة قبل أن يتم إيقاف النشاط بالكامل. يتم إيقاف النشاط في حالة تم إستدعاء  دالة finish()، أو من قبل النظام لإستعمال الذاكرة لنشاط آخر. للتفريق بين هاتين الحالتين يمكن استعمال isFinishing().

لا شي

أتمنى أن تكون هذه الحلقة مفيدة، وأرجو سماع آرائكم وتعليقاتكم.

اترك تعليقاً

الحقول المطلوبة موسومة بالعلامة *.