النشاط أحد المكونات الأساسية لتطبيق Android، ويمثل عادة شاشة واحدة ذات واجهة مستخدم، مثل شاشة تسجيل الدخول أو قائمة الرسائل أو صفحة الإعدادات. وكل نشاط فئة ترث من Activity أو، في أغلب الأحيان، من AppCompatActivity أو ComponentActivity، ويجب تسجيله في ملف AndroidManifest.xml الخاص بالتطبيق. وعندما يفتح المستخدم التطبيق من الشاشة الرئيسية، يبدأ النظام النشاط المحدد كنقطة دخول التطبيق، ومن هناك يستطيع التطبيق فتح أنشطة أخرى بواسطة كائنات Intent.
للنشاط دورة حياة يتحكم فيها نظام Android. فمن خلال دوال مثل onCreate() و onStart() و onResume() و onPause() و onStop() و onDestroy()، يُبلَّغ التطبيق عندما تُنشأ الشاشة أو تصبح مرئية أو تفقد التركيز أو تُغلق، حتى يمكن تحرير الموارد وحفظ البيانات في اللحظة المناسبة. وتستخدم كثير من التطبيقات الحديثة نشاطًا واحدًا فقط أو بضعة أنشطة، وتبني الشاشات المنفردة بكائنات Fragment أو بـ Jetpack Compose، لكن النشاط يظل العنصر الذي يربط واجهة مستخدم التطبيق بالنظام.
يشير النشاط في تطوير التطبيقات إلى شاشة واحدة في تطبيق Android تعمل كنافذة تفاعلية للمستخدم. وكل نشاط مسؤول عن التعامل مع تفاعلات المستخدم وعرض البيانات، ما يتيح للمطورين إنشاء تجارب مستخدم ديناميكية وجذابة. وتستطيع الأنشطة العمل معًا بتمرير البيانات فيما بينها، ما يضمن تنقلًا ووظائف سلسة في التطبيق.
More about Activity
النشاط مكوّن محوري في تطوير تطبيقات Android يمثل شاشة واحدة ذات واجهة مستخدم. وكل نشاط وحدة قائمة بذاتها تتعامل مع تفاعلات المستخدم وتعرض البيانات، ما يتيح للمطورين إنشاء تجارب مستخدم ديناميكية وجذابة. وتُعدّ الأنشطة لبنات بناء أساسية لتطبيقات Android، وتعمل كنقاط دخول يتفاعل المستخدمون من خلالها مع وظائف التطبيق.
من الناحية التقنية، النشاط فئة فرعية من فئة Activity في Android SDK، ويعمل بالتعامل مع دوال دورة الحياة التي تتحكم في كيفية إنشاء النشاط وبدئه وإيقافه وإتلافه. وعندما يبدأ نشاط، يمر بسلسلة من مراحل دورة الحياة التي تتيح للمطورين إدارة الموارد بكفاءة والاستجابة لتفاعلات المستخدم. وتشمل هذه دوال مثل onCreate() و onStart() و onResume() و onPause() و onStop() و onDestroy()، ولكل منها دور في ضمان تجربة مستخدم سلسة ومستجيبة.
يمكن عرض الأنشطة بطرق مختلفة، تدعم كل منها أنواعًا مختلفة من التفاعل:
ملء الشاشة: هنا يعمل النشاط كشاشة مستقلة تتعامل مع تفاعلات المستخدم وتعرض البيانات. وهذا هو الشكل الأكثر شيوعًا، الذي يتنقل فيه المستخدم بين الشاشات المختلفة في التطبيق.
كمربع حوار: بسمة مربع الحوار، يُعرض النشاط كمربع حوار يطفو فوق الشاشة الحالية. ويُستخدم ذلك أحيانًا لعرض رسائل مهمة أو طلب إدخال من المستخدم دون مغادرة السياق الحالي، وإن كانت مربعات الحوار تُنفَّذ في أغلب الأحيان بكائنات DialogFragment أو بـ Compose.
الوضع الغامر: يتولى النشاط التحكم الكامل في الشاشة ويخفي أشرطة النظام مثل شريط الحالة وشريط التنقل لتوفير تجربة غامرة. وهذا مثالي للألعاب أو تشغيل الوسائط، حيث يُعدّ التركيز على المحتوى أمرًا حاسمًا.
ومن أكبر نقاط قوة الأنشطة قدرتها على التعامل مع تفاعلات المستخدم وأنماط التنقل المعقدة. فنموذج الأنشطة في Android يدعم عددًا من أنماط التنقل، مثل مكدس الرجوع، الذي يتيح للمستخدمين الرجوع إلى الشاشات السابقة، ما يخلق تجربة مستخدم بديهية ويمكن التنبؤ بها. وفضلًا عن ذلك، تستطيع الأنشطة مشاركة البيانات والتواصل فيما بينها بواسطة كائنات Intent، ما يتيح تكاملًا سلسًا بين أجزاء التطبيق المختلفة.
كما صُممت الأنشطة لتكون موفرة للموارد. فدوال دورة الحياة في Android تتيح للمطورين تحسين استهلاك الموارد بتحرير الموارد غير الضرورية عندما لا يكون النشاط مرئيًا وإعادة تحميلها عندما يعود إلى الواجهة. وهذا يساعد على ضمان بقاء التطبيقات مستجيبة وفعالة، حتى على الأجهزة ذات الموارد المحدودة.
عمليًا، شكّلت الأنشطة طريقة تصميم تطبيقات Android وتطويرها. فهي توفر نهجًا منظمًا للتعامل مع تفاعلات المستخدم وأنماط التنقل، ما يتيح للمطورين إنشاء تجارب مستخدم غنية وجذابة. والأنشطة في صميم كثير من التطبيقات الشائعة، حيث تُستخدم لتنظيم المحتوى والتعامل مع إدخال المستخدم والتنقل بين الوظائف المختلفة.
خلاصة القول، تُعدّ الأنشطة جزءًا أساسيًا من تطوير Android يجمع بين المرونة والكفاءة وسهولة الاستخدام في حل يتيح للمطورين إنشاء تطبيقات قوية وبديهية. وتجعلها قدرتها على التعامل مع دورات الحياة وأنماط التنقل المعقدة أداة محورية في تطوير التطبيقات الحديث، حيث تُعدّ تجربة المستخدم والإدارة الفعالة للموارد أمرين حاسمين.
Frequently asked questions about Activity
ما هو النشاط في Android؟
النشاط إحدى لبنات البناء الأساسية لتطبيق Android. ويمثل عادة شاشة واحدة ذات واجهة مستخدم، مثل شاشة تسجيل الدخول أو قائمة الرسائل أو صفحة الإعدادات. ويتفاعل المستخدم مع التطبيق من خلال أنشطته.
وكل نشاط فئة ترث من Activity أو، في أغلب الأحيان، من AppCompatActivity أو ComponentActivity، ويجب الإعلان عنه في ملف AndroidManifest.xml. ويُوسم نشاط واحد كنقطة الدخول، حتى يعرف النظام ما يفتحه عندما ينقر المستخدم على أيقونة التطبيق. وكثيرًا ما تضم التطبيقات الحديثة أنشطة قليلة وتستخدم كائنات Fragment أو Jetpack Compose لعرض الشاشات المختلفة.
كيف تعمل دورة حياة النشاط؟
يمر النشاط بسلسلة من الحالات منذ لحظة إنشائه حتى إغلاقه. ويستدعي Android دوال محددة عندما تتغير الحالة. فتُستدعى onCreate عندما يُنشأ النشاط، وهنا تُهيأ واجهة المستخدم. وتُستدعى onStart و onResume عندما يصبح مرئيًا وجاهزًا للاستخدام.
وعندما ينتقل المستخدم إلى تطبيق أو شاشة أخرى، تُستدعى onPause و onStop، وعندما يُغلق النشاط بالكامل، تُستدعى onDestroy. وبوضع الشيفرة في الدوال الصحيحة، يستطيع التطبيق مثلًا إيقاف فيديو عندما لا يكون مرئيًا وحفظ البيانات قبل إغلاقه. وقد يسبب التعامل غير الصحيح أخطاء ويهدر الموارد.
كيف ينتقل التطبيق بين الأنشطة؟
ينتقل التطبيق من نشاط إلى آخر بواسطة Intent. ويصف Intent النشاط الذي ينبغي فتحه ويمكن أن يحتوي على بيانات، مثل معرّف منتج ينبغي أن تعرضه الشاشة الجديدة. ويُرسل Intent بالدالة startActivity.
ويوضع النشاط الجديد في أعلى مكدس يُعرف بمكدس الرجوع. وعندما يضغط المستخدم على زر الرجوع، يُغلق النشاط العلوي، ويُعرض النشاط السابق مجددًا. وإذا احتاجت الشاشة الجديدة إلى إعادة نتيجة، مثل صورة مختارة، تُستخدم Activity Result API. غير أن كثيرًا من التطبيقات الحديثة تستخدم نشاطًا واحدًا ومكوّن Navigation للتنقل بين الشاشات داخله.
ماذا يحدث للنشاط عند تدوير الشاشة؟
عندما يدوّر المستخدم الهاتف، تتغير الإعدادات، ويُتلف Android افتراضيًا النشاط الحالي ثم ينشئه مجددًا. وهذا يتيح تحميل تخطيط مختلف يناسب الاتجاه الجديد، لكنه يعني أيضًا أن البيانات المحفوظة في النشاط وحده قد تضيع.
ولتجنب ذلك، يُستخدم عادة ViewModel، الذي يصمد أمام تغيرات الإعدادات ويحتفظ بالبيانات مثل القوائم المحمّلة. ويمكن حفظ كميات صغيرة من الحالة، مثل النص في حقل أو موضع التمرير، بـ onSaveInstanceState أو بـ rememberSaveable في Jetpack Compose. وينطبق الأمر نفسه عندما تتغير اللغة أو السمة أو حجم الشاشة.
ما الفرق بين النشاط و Fragment؟
النشاط مكوّن قائم بذاته يعرفه النظام ويُعلن عنه في AndroidManifest.xml. ويعمل كحاوية لواجهة مستخدم التطبيق ويمكن بدؤه مباشرة، مثلًا من إشعار أو من تطبيق آخر.
أما Fragment فجزء أصغر قابل لإعادة الاستخدام من واجهة المستخدم يعيش دائمًا داخل نشاط. ويمكن عرض عدة كائنات Fragment في النشاط نفسه، مثل قائمة وعرض تفاصيل جنبًا إلى جنب على جهاز لوحي. ولكائنات Fragment دورة حياة خاصة بها مرتبطة بالنشاط الذي يستضيفها. وتستخدم كثير من التطبيقات أنشطة قليلة وكائنات Fragment أو شاشات Compose كثيرة.
ما أوضاع التشغيل للنشاط؟
تحدد أوضاع التشغيل كيفية وضع نشاط جديد بالنسبة إلى الأنشطة الموجودة عند بدئه. وافتراضيًا، يُنشأ مثيل جديد في كل مرة، حتى لو كان النشاط نفسه مفتوحًا بالفعل.
ومع singleTop، يُعاد استخدام النشاط إذا كان بالفعل في أعلى المكدس، بدلًا من إنشاء نشاط جديد. ومع singleTask، لا يوجد إلا مثيل واحد، وتُزال الأنشطة التي فوقه عند فتحه مجددًا. ويضع singleInstance النشاط في مهمة خاصة به، ومنذ Android 12، يتيح singleInstancePerTask مثيلًا واحدًا لكل مهمة. وتُحدد أوضاع التشغيل في AndroidManifest.xml أو بأعلام على Intent، وتُستخدم مثلًا لتجنب التكرار عندما يُفتح التطبيق من إشعار.
Activity for dummies
النشاط في التطبيق يشبه شاشة واحدة على الهاتف المحمول. فكّروا فيه كصفحة في كتاب. عندما يُفتح تطبيق، تظهر شاشة يمكن فيها فعل شيء محدد، مثل قراءة الأخبار أو إرسال رسالة أو مشاهدة الصور. وكل شاشة من هذه الشاشات «نشاط». والانتقال من قراءة الأخبار إلى إرسال رسالة يعني الانتقال من نشاط إلى آخر. إنها الطريقة التي تنظم بها التطبيقات الوظائف والمعلومات المختلفة، حتى يسهل التنقل فيها واستخدامها.