Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK

ما هي  دورة  حياة انشطة  الاندرويد  (Android Activity Lifecyle)؟

by
Read Time:8 minsLanguages:

Arabic (العربية/عربي) translation by Wareef (you can also view the original English article)

في  منشوري السابق ,تعلمت  ان ال(intents) تسمح لنا  بارسال رسالة  من مكون اندرويد الى اخر. حسنا، هناك نوع مهم جدا من المكونات هو النشاط (Activity).

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

دورة  حياة  الانشطة (Activity Lifecycle)

النشاط  (Activity)  هو عبارة  عن شاشة  مفردة  في  الاندرويد . مثل النافذة  في  تطبيق سطح المكتب  , او  الاطار في برنامج  الجافا . النشاط (Activity) يسمح لك  بوضع كل  مكونات  واجهات  المستخدم (  UI components) او الواجهة الرسومية التي يتفاعل معها المستخدم (widgets ) معا  على الشاشة  

من المهم  ان  نفهم  ان النشاط  له  دورة  حياة : يعني  هذا ان  يمكن ان  يكون في واحدة من  عدة الحالات  المختلفة  (several different states) ,  اعتمادا علي ما يحدث مع التطبيق والتفاعل مع المستخدم.

دوال دورة الحياة (Lifecycle Methods)

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

  ()onCreate :يتم استدعاء هذا عند تهيئه النشاط لأول مره. تحتاج إلى تنفيذ هذه الدالة من أجل القيام بأي تهيئه محدده للنشاط الخاص بك.

 onStart():يتم استدعاء هذا في  المرة الاولي التي يكون النشاط علي وشك ان يصبح مرئيا للمستخدم ، كما يستعد النشاط لياتي إلى المقدمة ليصبح تفاعليا. بمجرد انتهاء رد الاتصال هذا،  سيتم استدعاء دالة onResume ().

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

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

onStop (): يتم استدعاء هذه  الدالة عندما يكون النشاط لم يعد مرئيا في التطبيق. ويمكن ان يحدث ذلك ، علي سبيل المثال ، عندما يتم تحميل نشاط آخر وأخذ الشاشة الكاملة للجهاز. عند استدعاء هذه  الدالة ، يقال ان النشاط في حاله توقف. في هذه الحالة ، النظام اما يقوم باستدعاء دالة  onRestart () لأعاده التفاعل مع النشاط. أو يستدعي دالة  onDestroy () لتدمير النشاط.

onDestroy (): يتم استدعاء هذا قبل ان يتم تدمير النشاط. يقوم النظام باستدعاء هذه  الدالة عند قيام المستخدم بإنهاء النشاط،  أو لان النظام يقوم بشكل مؤقت بتدمير  العملية التي تحتوي على النشاط لتوفير مساحة. تاكد من تحرير اي موارد النشاط الخاص بك  قد انشائها في هذه  الدالة،  والا التطبيق الخاص بك سوف يكون لديه  تسريب  في الذاكرة! 

onRestart ():  يتم استدعاءه عند أعاده تشغيل نشاط بعد ان تم إيقاف.

بدء نشاط (Starting an Activity)

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

من الضروري ربط الانشطه معا عندما يحتاج نشاط  إلى بدء نشاط آخر. لبدء نشاط ، اما  عليك ان تستخدم startActivity() أوstartActivityForResult(). يجب  عليك  تمرير (intent) في  كلتا  الحالتين 

بدء نشاط بدون نتيجة متوقعه (Starting an Activity With No Expected Result)

  startActivity () يتم استخدامها  إذا لم يكن النشاط الذي بدا حديثا بحاجه إلى إرجاع نتيجة.

يظهر الكود  التالي كيفيه بدء نشاط آخر باستخدام هذه الدالة :

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

بدء نشاط بنتيجة (Starting an Activity With a Result)

 startActivityForResult()  يستخدم لبدء نشاط آخر ويتوقع الحصول على البيانات مره أخرى من النشاط الذي بدا حديثا. وبعبارة أخرى ، استخدم هذا عندما تريد الحصول علي نتيجة من النشاط الهدف رجوعا إلى النشاط  المستدعى ، علي سبيل المثال إذا كان النشاط الهدف هو جمع بعض معلومات المستخدم في مربع حوار مشروط ( modal dialog).

تتلقي النتيجة من النشاط في الدالة  onActivityResult(int requestCode, int resultCode, Intent data)     سيتم اعادة  النتيجة ك (intent) .

مثال لبدء نشاط (Example of Starting an Activity)

هنا مثال لإظهار كيفيه بدء تشغيل نشاط.

أولا ، يمكنك   انشاء ال MainActivity  الخاص بك مع دالة الoncreate () ، وملف تخطيط (layout) ، والكود  المطلوب 

في دالة onCreate () ، ستقوم بإنشاء مثيل ( instance ) جديد من ال intent لبدء نشاطك الثاني ( second Activity).

عندما تكون  على  استعداد لبدء هذا النشاط ، ويقول ردا علي زر انقر فوق ، عليك استدعاء startActivityForResult() ، والتي سوف تمرر (intent) المنشاة حديثا والكود  المطلوب 

ومع ذلك ، في ال MainActivity تحتاج إلى التعامل مع احداث نتيجة النشاط ( handle Activity result ). يمكنك القيام بذلك عن طريق تنفيذ دالة onActivityResult(). هذه هي الدالة سوف تتلقي النتيجة من النشاط الآخر.

واليك كيف ينبغي ان ننظر:

والآن اذهب وأنشئ  SecondActivity. وينبغي ان تبدو شيئا  مثل الكود أدناه.

إنهاء نشاط  (Terminating an Activity)

قبل إنهاء نشاط ما ، سيتم استدعاء دوال  دورة الحياة (lifecycle methods)  المقابلة .

  دالة onPause () يجب  عليها  ايقاف كافة المستمعين(listener) وتحديثات واجهه المستخدم (UI updates). دالة onStop() يجب عليها حفظ بيانات التطبيق. وأخيرا ، ستقوم  دالة  onDestroy () بتحرير إية موارد تم تخصيص النشاط(Activity) لها.

عندما يقوم المستخدم بالتبديل إلى التطبيق التي تم إنهاؤها بواسطة النظام, يتم استدعاء دالة onResume (). استنادا إلى البيانات المحفوظة ، فانه يمكن أعاده تسجيل المستمعين(re-register listeners) ومشغل تحديثات واجهه المستخدم( trigger UI updates) .

حاله مثيل  النشاط (Activity Instance State)

يحتاج النشاط إلى طريقه للاحتفاظ بقيمة الحالة (state) وبيانات المستخدم التي تم الحصول عليها. يمكن الحصول علي هذه البيانات من مدخلات المستخدم(user input) أويتم  إنشاؤها اثناء عدم وجود النشاط علي الشاشة .

علي سبيل المثال ، يمكن ان يؤدي تغيير اتجاه الجهاز(orientation)  إلى اتلاف النشاط وأعاده إنشائه. في مثل هذا السيناريو ، تحتاج إلى التاكد من حفظ كافة حالات النشاط قبل ان يتم اتلافها ثم أعاده تحميلها مره أخرى عند إنشائها. والا ، فان اي بيانات لدى  نشاطك(Activity)  في ذلك الوقت يمكن ان تضيع تماما.

لحفظ حاله النشاط(Activity state) ، يمكنك ان  تقوم  بعمل (override) لدالة onSaveInstanceState()  .تقوم هذه  الدالة  بتمرير كائن (object ) ال  Bundle  كباراميتر.  يحتوي  الbundle على نص (string) ,  أنواع البيانات البدائية (primitive data types) او كائنات (objects). في هذه الدالة ، ببساطه يتم  أضافه اي بيانات  مهمة للحالة(state data)  إلى  الحزمة (bundle). سيتم إرجاع  الحزمة ( bundle ) إلى النشاط لاحقا حتى تتمكن من استعاده حاله النشاط

لاستخراج الحالة التي تم حفظها من الحزمة(bundle) واستعادتها ،قم بتنفيذ  دالة onRestoreInstanceState(). يتم استدعاءها  بين onStart () و onResume()  دوال  دورة  الحياة 

وسوف ننظر أعمق في حاله مثيل النشاط (Activity instance state) في المقالة القادمة .

الختام

بعد هذا المنشور ، سيكون لديك فهم جيد لكيفيه عمل دوره حياه النشاط. وقد تعلمت ان هناك طريقتين لبدء نشاط ، بالاضافه إلى الحصول علي بعض المؤشرات لكيفيه معالجة(handled ) حاله المثيل (instance state) في دوره حياه النشاط.

شكرا للقراءة ، وبينما انت هنا ، يمكنك ان تطلع على بعض المنشورات  لدينا عن كيفية كتابة  كود  لتطبيقات  الاندرويد 

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.