فهم المهام والكومة الخلفيه

الإعلانات

فهم المهام والكومة الخلفيه

 

 

فهم المهام والكومة الخلفيه

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

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

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

يتم إضافة هذا النشاط الجديد إلى الكومة الخلفيه. إذا قام المستخدم بالضغط على الزر “رجوع”  فسيتم إنهاء هذا النشاط الجديد ويظهر في الكومة.

 

يقدم الفيديو التالي نظرة عامة حول كيفية عمل الكومة الخلفيه.

 

 

عندما يتم تشغيل التطبيقات في وقتٍ واحد في بيئة تعدد النوافذ، المدعومة في أندرويد 7.0 (مستوى API 24) وأعلى..

يقوم النظام بإدارة المهام لكل نافذة بشكلٍ منفصل؛ قد يكون لكل نافذة عدة مهام.

ينطبق الأمر نفسه على تطبيقات الأندرويد التي تعمل على أجهزة كروم بوك: حيث يدير النظام المهام أو مجموعات المهام بمبدأ كل نافذة على حده.

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

(أو إختصاراً لتطبيق على الشاشة الرئيسية)، تأتي مهمة ذلك التطبيق إلى المقدمة. إذا لم تكن هناك مهمة للتطبيق (لم يتم إستخدام التطبيق مؤخراً)..

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

 

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

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

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

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

عند بدئها بواسطة النشاط الحالي، وتطرح من الكومة عند مغادرة المستخدم لها بإستخدام الزر “رجوع“.

على هذا النحو، تعمل الكومة الخلفية كـ بنية كائن “الأخير دخولاً، الأول خروجاً”.

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

 

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

 

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

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

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

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

المهمة ببساطة تفقد التركيز أثناء نشاط مهمة أخرى، كما هو موضح في الشكل 2.

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

لنفترض على سبيل المثال، أن المهمة الحالية (المهمة أ) لها ثلاثة أنشطة في كومتها – إثنان تحت النشاط الحالي.

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

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

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

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

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

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

(أو عن طريق تحديد مهمة التطبيق من شاشة “التطبيقات الحديثه“). هذا مثال على تعدد المهام في الاندرويد.

الشكل 2. مهمتان: تستلم المهمة ب تفاعل المستخدم في المقدمة، بينما تكون المهمة أ في الخلفية، في إنتظار أن يتم إستئنافها.

 

فهم المهام والكومة الخلفيه

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

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

 

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

 

يتم إنشاء مثيل جديد من هذا النشاط ودفعه إلى الكومه (بدلاً من جلب أي مثيل سابق للنشاط الى الأعلى).

على هذا النحو، قد يتم إنشاء نشاطٍ واحد في تطبيقك عدة مرات (حتى من المهام المختلفة)، كما هو موضح في الشكل 3.

 

الشكل 3. إنشاء مثيل نشاط واحد عدة مرات.

 

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

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

كيفية القيام بذلك سوف تتم مناقشته في القسم التالي حول إدارة المهام.

 

فهم المهام والكومة الخلفيه

لتلخيص السلوك الإفتراضي للأنشطة والمهام:

  •  عندما يبدأ النشاط أ النشاط ب، يتم إيقاف النشاط أ، لكن النظام يحتفظ بحالته (مثل موضع التمرير والنص الذي تم إدخاله في النماذج).

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

 

  •  عندما يغادر المستخدم مهمة بالضغط على زر الصفحة الرئيسية، يتم إيقاف النشاط الحالي وتنتقل مهمته إلى الخلفية.

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

فستنتقل المهمة إلى المقدمة وتستأنف النشاط الموجود في الجزء العلوي من الكومه.

 

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

عندما يتم تدمير نشاط، فإن النظام لا يحتفظ بحالته.

 

  • يمكن إنشاء مثيل للأنشطة عدة مرات، حتى من المهام الأخرى.

 

 

تصميم التنقل

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

 

 

 

فهم المهام والكومة الخلفيه

إدارة المهام


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

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

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

ومع ذلك، قد تقرر أنك تريد مقاطعة السلوك العادي.

فربما تريد نشاطاً في تطبيقك ليبدأ مهمة جديدة عند بدء تشغيلها (بدلاً من وضعها في المهمة الحالية)؛ ..

أو عندما تبدأ نشاط ما، وترغب في جلبه للمقدمه في مثيل موجود له (بدلاً من إنشاء مثيل جديد في أعلى الكومه الخلفيه)؛..

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

 

فهم المهام والكومة الخلفيه

 

يمكنك القيام بهذه الأشياء وأكثر، مع السمات في عنصر الفهرس “نشاط” <activity> ومع العلامات في الغرض الذي تقوم بتمريره إلى ()startActivity .

 

بهذا الصدد، فإن السمات الرئيسية لـ <activity> التي يمكنك إستخدامها هي:

فهم المهام والكومة الخلفيه

والأعلام الأساسية التي يمكنك إستخدامها هي:

  • FLAG_ACTIVITY_NEW_TASK
  • FLAG_ACTIVITY_CLEAR_TOP
  • FLAG_ACTIVITY_SINGLE_TOP

 

في الأقسام التالية، سترى كيف يمكنك إستخدام سمات الإيضاح هذه..

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

كما نوقش بشكلٍ منفصل الإعتبارات الخاصة بكيفية تمثيل المهام والأنشطة وإدارتها في شاشة “التطبيقات الحديثه“.

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

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

 

تحذير: معظم التطبيقات لا ينبغي أن تقاطع السلوك الإفتراضي للأنشطة والمهام.

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

أثناء الإطلاق وعند الرجوع إليه مرة أخرى من الأنشطة والمهام الأخرى بإستخدام زر “الرجوع“.

تأكد من إختبار سلوكيات التنقل التي قد تتعارض مع السلوك الذي يتوقعه المستخدم.

 

 

 

فهم المهام والكومة الخلفيه

تحديد وضع الإطلاق “التشغيل”

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

 

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

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

 

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

وأن النشاط أ يمكنه أيضاً طلب كيفية إرتباط النشاط ب بالمهمة الحالية. إذا حدد كلا النشاطين كيفية ربط النشاط ب بالمهمة..

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

ملاحظة: بعض أوضاع التشغيل المتاحة لملف الإيضاح لا تتوفر كأعلام للأغراض، وبالمثل، لا يمكن تعريف بعض أوضاع التشغيل المتاحة كأعلام للأغراض في الإيضاح.

 

 

 

فهم المهام والكومة الخلفيه

إستخدام ملف الإيضاح

عند الإعلان عن نشاط في ملف الإيضاح، يمكنك تحديد كيفية إرتباط النشاط بمهمة بإستخدام سمة launchMode للعنصر <activity>.

تحدد السمة launchMode تعليمات حول كيفية بدء النشاط في مهمة ما. هناك أربعة أوضاع تشغيل مختلفة يمكنك تعيينها للسمة launchMode:

 

 

الوضع “القياسي” (الوضع الإفتراضي)

إفتراضياً. يقوم النظام بإنشاء مثيل جديد للنشاط في المهمة التي تم بدء تشغيلها وتوجيه الغرض إليها.

يمكن إنشاء مثيل للنشاط عدة مرات، ويمكن أن ينتمي كل مثيل إلى مهام مختلفة، ويمكن أن يكون لمهمة واحدة عدة مثيلات.

 

الوضع مهمة عليا “singleTop”

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

إستدعاء دالة ()onNewIntent الخاصه به، بدلاً من إنشاء مثيل جديد للنشاط. يمكن إنشاء مثيل للنشاط عدة مرات..

ويمكن أن ينتمي كل مثيل إلى مهام مختلفة، ويمكن أن يكون لمهمة واحدة عدة مثيلات..

(ولكن فقط إذا كان النشاط الموجود في أعلى الكومة الخلفية، ليس مثيلاً حالياً للنشاط).

 

على سبيل المثال، لنفترض أن مهمة في الكومة الخلفية تتكون من النشاط الأساسي أ مع ..

أنشطة ب و س و د في الأعلى (الكومة مكونة من أ، ب، س، د؛ و د في الأعلى).

يصل الغرض للنشاط من النوع د. إذا كان د لديه وضع التشغيل “القياسي” standard الإفتراضي، يتم تشغيل مثيل جديد للفئة..

وتصبح الكومه أ-ب-س-د-د. ومع ذلك، إذا كان وضع تشغيل د هو “singleTop“، فإن المثيل الحالي لـ د يتلقى الغرض عبر “غرض جديد” ()onNewIntent ..

لأنه في الجزء العلوي من الكومه – تظل الكومة أ-ب-س-د. ومع ذلك، إذا وصل الغرض للنشاط من النوع ب..

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

 

ملاحظة: عند إنشاء مثيل جديد لنشاط ما، يمكن للمستخدم الضغط على الزر “رجوع” للعودة إلى النشاط السابق.

ولكن عندما يتعامل مثيل حالي لنشاط ما مع الغرض الجديد، لن يتمكن للمستخدم من الضغط على الزر “رجوع” للعودة إلى حالة النشاط قبل وصول الغرض الجديد في ()onNewIntent.

 

فهم المهام والكومة الخلفيه

الوضع مهمة واحدة “singleTask”

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

يقوم النظام بتوجيه الغرض إلى المثيل الموجود من خلال إستدعاء دالة ()onNewIntent الخاصه به..

بدلاً من إنشاء مثيل جديد. يمكن أن يوجد مثيل واحد فقط من النشاط في كل مرة.

 

ملاحظة: على الرغم من بدء النشاط في مهمة جديدة، إلا أن زر “الرجوع” لا يزال يُعيد المستخدم إلى النشاط السابق.

 

فهم المهام والكومة الخلفيه

الوضع مثيل واحد “singleInstance”

مثل وضع مهمه واحده “singleTask“، إلا أن النظام لا يقوم بتشغيل أي أنشطة أخرى في المهمة التي تحتفظ بالمثيل.

يكون النشاط دائماً العضو الفردي والوحيد في مهمته؛ أي أنشطة يتم بدأها بواسطته يتم فتحها في مهمة منفصلة.

 

وكمثال آخر، يعلن تطبيق متصفح الأندرويد أنه يجب دائماً فتح نشاط متصفح الويب في مهمته الخاصة –

من خلال تحديد،  وضع التشغيل مهمة واحده singleTask في عنصر النشاط <activity>.

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

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

فسيتم جلب تلك المهمة للأمام للتعامل مع الغرض الجديد.

بغض النظر عما إذا كان النشاط يبدأ في مهمة جديدة أو في نفس المهمة مثل النشاط الذي بدأه..

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

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

في هذه المرحلة، ستحتوي الكومة الخلفية الآن على كافة الأنشطة من المهمة..

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

 

الشكل 4. تمثيل لكيفية إضافة نشاط بإستخدام وضع التشغيل مهمة واحده “singleTask” إلى الكومة الخلفية. إذا كان النشاط جزءاً بالفعل من مهمة خلفية مع كومتها الخلفيه، فستظهر الكومة الخلفية بالكامل للأمام و أعلى المهمة الحالية.

 

لمزيد من المعلومات حول إستخدام أوضاع التشغيل في ملف الإيضاح، راجع وثائق عنصر النشاط <activity>، حيث تتم مناقشة سمة launchMode والقيم المقبولة بشكلٍ أكثر.

 

ملاحظة: يمكن تجاوز السلوكيات التي قمت بتحديدها لنشاطك بإستخدام السمة launchMode بواسطة..

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

 

فهم المهام والكومة الخلفيه

إستخدام أعلام الغرض

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

الأعلام التي يمكنك إستخدامها لتعديل السلوك الإفتراضي هي:

 

FLAG_ACTIVITY_NEW_TASK

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

مع إستعادة حالتها الأخيرة ويتلقى النشاط الغرض الجديد في ()onNewIntent.

و هذا يعطي نفس السلوك كقيمة وضع التشغيلsingleTask“، الذي تمت مناقشته في القسم السابق.

 

FLAG_ACTIVITY_SINGLE_TOP

إذا كان النشاط الجاري تشغيله هو النشاط الحالي (موجود في الجزء العلوي من الكومة الخلفيه)..

فسوف يتلقى المثيل الحالي إستدعاء إلى ()onNewIntent ، بدلاً من إنشاء مثيل جديد للنشاط.

و هذا يعطي نفس السلوك كقيمة وضع التشغيلsingleTop” ، الذي تمت مناقشته في القسم السابق.

 

FLAG_ACTIVITY_CLEAR_TOP

إذا كان النشاط الجاري تشغيله تم تشغيله بالفعل في المهمة الحالية، فعندئذ بدلاً من إطلاق مثيل جديد لهذا النشاط..

يتم تدمير جميع الأنشطة الأخرى الموجودة فوقه ويتم تسليم هذا الغرض إلى المثيل المستأنف للنشاط (الموجود الآن في الأعلى)، بواسطة ()onNewIntent ).

لا توجد قيمة لسمة وضع التشغيل و التي تنتج هذا السلوك.

 

يتم إستخدام FLAG_ACTIVITY_CLEAR_TOP غالباً بالتزامن مع FLAG_ACTIVITY_NEW_TASK. عند إستخدامها معاً..

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

ملاحظة: إذا كان وضع التشغيل للنشاط المحدد هو الوضع “قياسي“، فسيتم إزالته أيضاً من الكومه ويتم إطلاق مثيل جديد في مكانه للتعامل مع الغرض الوارد.

ذلك لأنه يتم إنشاء مثيل جديد دائماً للغرض الجديد عندما يكون وضع التشغيل “قياسي“.

 

 

 

فهم المهام والكومة الخلفيه

التعامل مع التقارب

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

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

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

يمكنك تعديل التقارب لأي نشاط معين بإستخدام سمة التقارب taskAffinity الخاصة بعنصر <activity>.

تأخذ سمة taskAffinity قيمة سلسلة، والتي يجب أن تكون فريدة من أسم الحزمة الإفتراضي المُعلن في عنصر الإيضاح <manifest>..

لأن النظام يستخدم هذا الاسم لتعريف تقارب المهمة الإفتراضي للتطبيق.

 

يأتي دور التقارب في حالتين:

  •  عندما يحتوي الغرض الذي يطلق نشاط على علامة FLAG_ACTIVITY_NEW_TASK.

يتم إفتراضياً إطلاق نشاط جديد في مهمة النشاط الذي يستدعي ()startActivity . يتم دفعه إلى نفس الكومة الخلفيه التي فيها المتصل.

ومع ذلك، إذا كان الغرض الذي تم تمريره إلى ()startActivity يحتوي على علامة FLAG_ACTIVITY_NEW_TASK ..

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

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

إذا تسببت هذه العلامة في بدء النشاط لمهمة جديدة وضغط المستخدم على زر الصفحة الرئيسية لمغادرتها..

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

دائماً على بدء الأنشطة في مهمة خارجية، وليس كجزء منها أبداً، لذلك فهي دائماً ما تضع FLAG_ACTIVITY_NEW_TASK في الأغراض التي تمررها لبدء ()startActivity.

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

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

يحتوي على مرشح غرض لـ CATEGORY_LAUNCHER؛ راجع قسم بدء المهمة أدناه).

 

 

  •  عندما يكون للنشاط سمة allowTaskReparenting الخاصة به معينة على القيمة “صحيح“.

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

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

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

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

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

 

نصيحة: إذا كان ملف APK يحتوي على أكثر من “تطبيق” واحد من وجهة نظر المستخدم، فمن المحتمل أنك تريد..

إستخدام سمة تقارب المهام لتعيين تقاربات مختلفة للأنشطة المرتبطة بكل “تطبيق”.

 

 

فهم المهام والكومة الخلفيه

تنظيف الكومة الخلفيه

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

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

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

هناك بعض سمات النشاط التي يمكنك إستخدامها لتعديل هذا السلوك:

 

alwaysRetainTaskState

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

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

 

clearTaskOnLaunch

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

عندما غادر المستخدم المهمة وعاد إليها. بعبارة أخرى، هي معاكسة لسمة alwaysRetainTaskState.

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

 

finishOnTaskLaunch

هذه السمة تشبه سمة clearTaskOnLaunch، ولكنها تعمل على نشاط واحد، وليس على كامل المهمة.

يمكن أن تؤدي أيضاً إلى إختفاء أي نشاط، بما في ذلك النشاط الأساسي. عندما يتم تعيينها على القيمة “صحيح”..

يظل النشاط جزءاً من المهمة، فقط لجلسة العمل الحالية. إذا غادر المستخدم ثم عاد إلى المهمة، فإنه لن يعود موجوداً.

 

 

 

فهم المهام والكومة الخلفيه

 

بدء المهمة

يمكنك إعداد نشاط كنقطة دخول لمهمة عن طريق إعطائه مرشح غرض بإستخدام “android.intent.action.MAIN” ..

كإجراء محدد و “android.intent.category.LAUNCHER” كتصنيف محدد. مثال:

<activity ... >
    <intent-filter ... >
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    ...
</activity>

 

 

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

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

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

لهذا السبب، يجب إستخدام وضعي التشغيل اللذين يميزان الأنشطة كإجراء دائم لبدء مهمة "singleTask" و "singleInstance" ..

فقط عندما يحتوي النشاط على ACTION_MAIN و مرشح CATEGORY_LAUNCHER. على سبيل المثال تخيل..

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

ثم يقوم المستخدم بالضغط على زر الصفحة الرئيسية. يتم الآن إرسال المهمة إلى الخلفية وتكون غير مرئية.

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

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

finishOnTaskLaunch على القيمة “صحيح” (راجع تنظيف الكومة الخلفيه).

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

 

 

 

فهم المهام والكومة الخلفيه

المزيد من المصادر


 


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

الإعلانات

10 thoughts on “فهم المهام والكومة الخلفيه”

اترك رد