كيفية عمل برنامج أندرويد II

نواصل ما بدأناه في مقال سابق, حول كيفية عمل تطبيقات أندرويد, فكل واجهة مستخدم أو كل شاشة تتفاعل مع المستعمل هي عبارة عن نشاط, Activity له دورة حياة و كل تطبيق يتكون من نشاط واحد أو عدة أنشطة, و لو قمنا بمراجعة الوثائق الرسمية التي تتحدث حول الموضوع,  سنجد الحالات التي يمر منها كل نشاط تتمثل في الشكل التالي:

activity lifecycleهذه المراحل أو الحالات التي تمر منها كل Activity, المبرمج ليس له أن يتحكم فيها كي يغير من حالة لأخرى فهذا من عمل النظام, لكن للمبرمج أدوات و آليات تمكنه من متابعة و استغلال هذا التغير من حالة إلى أخرى, بواسطة الميثودات التي تستمد من الكلاس الأم Activity و هي التي تبتدا بسابقة ()onXْXXX, و يمكننا أن نصنف هذه التغير إلى خمسة مراحل أساسية تمر منها حالات كل نشاط:

life cycle activity event

نأتي على شرح بعض المراحل الأساسية.

  • (onCreate(Bundle: أول ميثود يتم تنفيذها عند تشغيل أي Activity, يتم تهيئة الواجهة الرسومية و تعريف بعض الكائنات حسب الحاجة, تأخذ بارامتر من فئة Bundle يمكن أن يكون null أو معلومات سبق تخزينها بواسطة الميثود (onSaveInstanceState(Bundle.
  • ()onStart: تشير إلى أن الActuvity مستعدة لإظهار واجهة المستخدم.
  • ()onResume: هنا هو المكان المناسب لأجل التفاعل مع المستعمل, غالبا ما يتم هنا تشغيل المقاطع الصوتية أو التأثيرات البصرية.
  • ()onPause: عندما تنفذ هذه الميثود تكون الActivity في حالة مرورها للخلفية, أي أن Activity أخرى قد أخذت مكانها و أصبحت في الواجهة لتتفاعل مع المستخدم, هنا يجب أخذ الإحتياط و تخزين المعلومات التي كانت حتى لو أراد المستعمل استعمالها من جديد يجدها على الحالة التي تركها عليها.
  • ()onStop: تدخل هذه الميثود حيز التنفيذ عندما تصبح الActivity غير مرئية و لم تستعمل بعد مدة من الوقت.
  • ()onRestart: لو نفذت هذ الميثود فإن الActivity ستعيد إظهار الواجهة الرسومية للمستخدم من جديد.
  • (onSaveInstanceState(Bundle: هذه الميثود ينفذها النظام عندما نود حفظ حالة الActivity أو حفظ معلومات أخرى لنسترجعها فيما بعد.
  • ()onDestroy: وهي آخر ميثود يمكن تنفيذها قبل إنهاء عمل الالActivity.

​أما بالنسبة لمزودات المحتوى ContentProvider فدورة حياته أو مدى استغلالها فهو محدود بمدة تنفيذها بواسطة ما يسمى ContentResolver.

المستقبلات BroadCastReciever الأمر نفسه كمزودات المحتوى دورة حياتها قصيرة أيضا, تكون في حالة نشاط عندم يبث رسالة ما كي تستقبلها, و يتم ذلك بواسطة الميثود onRecieve.

و أخيرا نأتي على دورة حياة الخدمات Service, حيث لها حالتان حسب طريقة التشغيل:

  1. في حالة بدئ تشغيل خدمة ما بواسطة الميثود ()startService, فإنها تتبع نفس مبادئ و قواعد دورة حياة الActivity, و يمكننا إيقاف هذه الخدمة من الخارج بالمناداة على الميثود ()Context.stopService أو داخليا بواسطة استعمال إحدى هاتين الطريقتين: ()Service.stopSelf أو ()Service.stopSelfResult.
  2. أما إذا تم استعمال طريقة ()Context.bindService فيتم بدئ تشغيل الخدمة إذا لم يكن قد سبق تشغيلها, فتنفذ ما هو مطلوب منها, و إذا أردنا توقيفها فنستعمل الطريقة ()Context.unBindService.

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

  •  (IBinder onBind(Intent intent
  • (boolean onUnbind(Intent intent
  • (void onRebind(Intent intent

و هذا رسم بياني من غوغل يوضح ما سبق ذكره بالنسبة للخدمات Services:

service life cycle

إذا كان لديك أي استفسار فلا تتردد في طرحه أو مراسلتنا, مستعدون لتوضيحه.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Time limit is exhausted. Please reload CAPTCHA.