مقدمة للأنشطة

الإعلانات

مقدمة للأنشطة

 

مقدمة للأنشطة

تعتبر فئة النشاط عنصراً مهماً في تطبيق الاندرويد، والطريقة التي يتم بها إطلاق الأنشطة و وضعها معاً، جزء أساسي من نموذج تطبيق المنصة.

بخلاف نماذج البرمجة، التي يتم فيها تشغيل التطبيقات، بإستخدام دالة ()main ، يبدأ نظام الأندرويد الكود، في مثيل نشاط..

عن طريق إستدعاء، دوال إستدعاء محددة، تتوافق مع مراحل معينة من دورة حياته.

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

للحصول على معلومات إضافية حول أفضل الممارسات لتصميم تطبيقك، راجع دليل بنية التطبيق.

 

 

 

 

مفهوم الأنشطة


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

بدلاً من ذلك، غالباً ما تبدأ رحلة المستخدم بشكلٍ غير حتمي. مثال، إذا قمت بفتح تطبيق بريد إلكتروني من شاشتك الرئيسية..

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

يقوم بتشغيل تطبيق بريدك الإلكتروني، فقد تنتقل مباشرة إلى شاشة تطبيق البريد الإلكتروني لإنشاء رسالة.

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

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

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

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

مثال، قد ينفّذ أحد أنشطة إحدى التطبيقات، شاشة التفضيلات، بينما ينفذ نشاط آخر شاشة تحديد الصورة.

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

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

مثال، النشاط الرئيسي، في تطبيق بريد إلكتروني بسيط، قد يوفر الشاشة التي تعرض صندوق الوارد.

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

على الرغم من أن الأنشطة تعمل معاً، لتشكل تجربة مستخدم متماسكة في تطبيق ما، فإن كل نشاط..

يرتبط فقط بشكلٍ فضفاض بالأنشطة الأخرى؛ عادة ما يكون هناك إعتماد أقل بين الأنشطة في التطبيق.

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

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

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

 

 

 

 

تهيئة ملف الإيضاح


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

 

 

الإعلان عن الأنشطة

للإعلان عن نشاطك، أفتح ملف الإيضاح الخاص بك، وقم بإضافة عنصر “النشاط” <activity> كتابع لعنصر “التطبيق” <application>. مثال:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

 

السمة الوحيدة المطلوبة لهذا العنصر هي سمة الأسم android:name، و التي تحدد اسم فئة النشاط.

يمكنك أيضاً إضافة سمات، تحدد خصائص النشاط، مثل التسمية أو الأيقونه أو ثيم واجهة المستخدم.

لمزيد من المعلومات حول هذه السمات وغيرها، اقرأ الوثائق المرجعية لعنصر النشاط <activity>.

ملاحظة: بعد نشر تطبيقك، يجب عليك ألا تغيّر أسماء الأنشطة. إذا فعلت ذلك، فسوف تتسبب في تعطل بعض الوظائف، مثل إختصارات التطبيقات.

لمزيد من المعلومات عن التغييرات التي يجب تجنبها بعد النشر، اقرأ أشياء لا يمكن تغييرها.

 

 

 

الإعلان عن مرشحات الغرض

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

مثال، قد يخبر الطلب الصريح النظام بأن يقوم بـ “بدء نشاط إرسال البريد الإلكتروني في تطبيق Gmail”، وعلى النقيض من ذلك..

فإن الطلب الضمني، يخبر النظام بأن يقوم بـ “بدء شاشة إرسال البريد الإلكتروني في أي نشاط يمكنه القيام بالمهمة”.

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

يمكنك الإستفادة من هذه الميزة من خلال إعلان سمة “مرشح الغرض” <intent-filter> في عنصر “النشاط” <activity>.

يتضمن تعريف هذا العنصر عنصر “الإجراء” <action> ، و إختيارياً، عنصر “التصنيف” <category> و / أو عنصر “البيانات” <data>.

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

كيفية تكوين نشاط يرسل بيانات نصية، ويتلقى طلبات من أنشطة أخرى للقيام بذلك:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

 

في هذا المثال، يحدد عنصر “النشاط” <action> أن هذا النشاط يرسل البيانات. مقدمة للأنشطة

الإعلان عن عنصر “التصنيف” <category> كإفتراضي، يمكّن النشاط من تلقي طلبات التشغيل.

يحدد عنصر “البيانات” <data> نوع البيانات، التي يمكن أن يرسلها هذا النشاط. يعرض مقتطف الكود التالي كيفية إستدعاء النشاط الموضح أعلاه:

KOTLIN

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

 

JAVA

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);

 

 

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

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

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

 

 

 

إعلان الأذونات

يمكنك إستخدام وسم “النشاط” <activity> في ملف الإيضاح، للتحكم في التطبيقات التي يمكنها بدء أنشطة معينه.

لا يمكن للنشاط الأصل، بدء نشاط تابع، ما لم يكن كلا النشاطين، لهما نفس الأذونات في ملف الإيضاح الخاص بهما.

إذا قمت بالإعلان عن عنصر “إستخدام أذونات” <uses-permission> لنشاطٍ معين، فيجب أن يكون للنشاط المستدعى، عنصر “إستخدام أذونات” <uses-permission> مطابق.

مثال، إذا كان تطبيقك يريد إستخدام تطبيق إفتراضي، يدعى SocialApp لمشاركة “مشاركة\ نشر صورة أو كتابة” على الشبكات الإجتماعية..

يجب أن يحدد تطبيق SocialApp بنفسه، الإذن التي يجب أن تكون لدى التطبيق الذي يستدعيه:

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

 

بعد ذلك، للسماح لك بالإتصال بـ SocialApp، يجب أن يتطابق تطبيقك مع الإذن المعيّنه في ملف إيضاح SocialApp:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

 

لمزيد من المعلومات حول الأذونات والأمان بشكلٍ عام، راجع الأمن والأذونات.

 

 

 

إدارة دورة حياة النشاط


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

 

()onCreate “تشغيل الإنشاء”

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

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

()setContentView لتحديد مخطط لواجهة مستخدم النشاط.

عند إنتهاء ()onCreate ، يكون الإستدعاء التالي دائماً هو ()onStart .

 

 

()onStart “تشغيل البدء”

عند إنتهاء ()onCreate ، يدخل النشاط في حالة البدء، ويصبح مرئياً للمستخدم.

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

 

()onResume “تشغيل الإستئناف”

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

ويقوم بإلتقاط كافة إدخالات المستخدم. يتم تنفيذ معظم الوظائف الأساسية للتطبيق في دالة ()onResume .

دائماً ما يتبع الإستدعاء ()onPause بالإستدعاء ()onResume .

 

 

()onPause “تشغيل الإيقاف المؤقت”

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

على سبيل المثال، بالنقر فوق زر الرجوع أو زر التطبيقات الأخيرة. عندما يستدعي النظام ()onPause لنشاطك..

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

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

تتضمن أمثلة هذا النشاط، نشاط يعرض شاشة لخريطة ملاحة، أو نشاط مشغل وسائط يعمل في الخلفيه.

حتى إذا فقدت هذه الأنشطة التركيز “أي لم تعد مرئية للمستخدم”، فإن المستخدم يتوقع أن تستمر واجهة المستخدم في التحديث.

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

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

بمجرد إنتهاء تشغيل “تشغيل الإيقاف المؤقت” ()onPause ، يكون الإستدعاء التالي إما “تشغيل الإيقاف” ()onStop ..

أو “تشغيل الإستئناف” ()onResume ، إعتماداً على ما يحدث، بعد دخول النشاط في حالة الإيقاف المؤقت. مقدمة للأنشطة

 

 

()onStop “تشغيل الإيقاف”

يستدعي النظام ()onStop عندما يصبح النشاط غير مرئياً للمستخدم. قد يحدث هذا بسبب تدمير النشاط، أو بدء نشاط جديد..

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

يكون الإستدعاء التالي الذي يستدعيه النظام هو، إما “بدء إعادة التشغيل” ()onRestart ، إذا عاد النشاط للتفاعل مع المستخدم..

أو “بدء التدمير” ()onDestroy إذا تم إنهاء هذا النشاط تماماً. مقدمة للأنشطة

 

 

()onRestart “تشغيل إعادة التشغيل”

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

()onRestart تقوم بإستعادة حالة النشاط من الوقت الذي تم إيقافه فيه.

هذا الإستدعاء متبوع دائماً بـ ()onStartمقدمة للأنشطة

 

()onDestroy “تشغيل التدمير”

يقوم النظام بهذا الإستدعاء قبل أن يتم إتلاف النشاط.

هذا الإستدعاء هو آخر إستدعاء يتلقاه النشاط. يتم تنفيذ ()onDestroy عادةً لضمان تحرير جميع موارد النشاط، عندما يتم إتلاف النشاط أو العملية التي تحتوي عليه.

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

 

 


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

الإعلانات