المهام وحزمة التطبيقات الخلفية

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

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

دورة حياة مهمة وحزمها الخلفية

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

عندما يبدأ النشاط الحالي مرة أخرى، يتم دفع النشاط الجديد إلى الأعلى. المكدس ويأخذ التركيز. يظل النشاط السابق في المكدس، ولكن تَوَقَّفْنَا. عند إيقاف نشاط ما، يحتفظ النظام بحالته الحالية واجهة المستخدم. عندما ينفِّذ المستخدم الإجراء الخلفي، يكون النشاط الحالي هو خرجت من أعلى الحزمة وتدميرها. تشير رسالة الأشكال البيانية ويتم استئناف النشاط السابق، وتتم استعادة الحالة السابقة لواجهة المستخدم.

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

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

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

سلوك النقر على الجهة الخلفية لأنشطة مشغِّل التطبيقات الجذر

أنشطة مشغّل الجذر هي أنشطة تشير إلى نية. فلتر معًا ACTION_MAIN و CATEGORY_LAUNCHER وتكون هذه الأنشطة فريدة من نوعها لأنها تعمل كنقاط دخول إلى تطبيقك من مشغّل التطبيقات ويتم استخدامها لبدء مهمة.

عندما ينقر المستخدم على زر الرجوع من نشاط مشغِّل التطبيقات الجذر أو إيماءاته، ينفِّذ النظام مع الحدث بشكل مختلف بناءً على إصدار Android الذي الجهاز قيد التشغيل.

سلوك النظام على الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم
يُكمل النظام النشاط.
سلوك النظام على الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث

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

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

إذا كنت بحاجة إلى توفير معلومات مخصّصة للرجوع إلى الصفحة السابقة ننصح باستخدام واجهات برمجة التطبيقات AndroidX Activity API بدلاً من onBackPressed() يتم الرجوع تلقائيًا إلى واجهات برمجة التطبيقات للأنشطة في AndroidX سلوك النظام الملائم في حالة عدم وجود مكونات تعترض النظام انقر على زر الرجوع.

ومع ذلك، إذا ألغى تطبيقك onBackPressed() المطلوب معالجتها الانتقال للخلف وإنهاء النشاط، وتعديل التنفيذ لإجراء مكالمة إلى super.onBackPressed() بدلاً من إنهائها. إجراء المكالمات يتم نقل النشاط ومهمته إلى الخلفية من قِبل "super.onBackPressed()" عند مناسبة وتوفر تجربة تنقل أكثر اتساقًا للمستخدمين بين التطبيقات.

المهام التي تعمل في المقدّمة وفي الخلفية

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

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

ضع في اعتبارك تدفق المهمة التالي للمهمة "أ" الحالية التي لديها ثلاثة أنشطة في حزمتها، بما في ذلك اثنان ضمن النشاط الحالي:

  1. يستخدم المستخدم زر الشاشة الرئيسية أو الإيماءة، ثم يبدأ تطبيقًا جديدًا من تطبيقات مشغِّل التطبيقات.

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

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

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

حالات أنشطة متعددة

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

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

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

بيئات النوافذ المتعددة

عند تشغيل التطبيقات في الوقت نفسه في نافذة متعددة البيئة، المتوافقة مع نظام التشغيل Android 7.0 (واجهة برمجة التطبيقات) المستوى 24) والمستويات الأعلى، يدير النظام المهام بشكل منفصل لكل نافذة. على كل مهام متعددة. وينطبق الأمر نفسه على تطبيقات Android التي تعمل على أجهزة Chromebook: يدير النظام المهام أو مجموعات المهام على على أساس كل فترة.

ملخّص مراحل النشاط

لتلخيص السلوك التلقائي للأنشطة والمهام:

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

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

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

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

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

إدارة المهام

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

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

ويمكنك إجراء هذه الإجراءات والمزيد باستخدام السمات في عنصر البيان <activity> وعلامات تشير إلى نية انتقالك إلى startActivity()

في ما يلي سمات <activity> الأساسية التي يمكنك استخدامها لإدارة المهام:

في ما يلي علامات الأهداف الرئيسية التي يمكنك استخدامها:

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

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

تحديد أوضاع الإطلاق

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

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

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

تحديد أوضاع التشغيل باستخدام ملف البيان

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

هناك خمسة أوضاع إطلاق يمكنك تخصيصها للسمة launchMode:

  1. "standard"
    الوضع التلقائي. ينشئ النظام مثيلاً جديدًا للنشاط في المهمة. التي بدأت منها وتوجيه النية إليها. يمكن أن يكون النشاط إنشاء مثيل عدة مرات، فيمكن أن ينتمي كل مثيل إلى مهام مختلفة، يمكن أن تتضمّن مهمة واحدة مثيلات متعددة.
  2. "singleTop"
    في حال وجود مثيل للنشاط بالفعل أعلى المهمة الحالية، يوجِّه النظام الغرض إلى ذلك المثيل من خلال طلب onNewIntent() بدلاً من إنشاء مثيل جديد للنشاط. النشاط إنشاء مثيل عدة مرات، فيمكن أن ينتمي كل مثيل إلى مهام مختلفة، ويمكن أن تحتوي مهمة واحدة على مثيلات متعددة (ولكن فقط إذا كان النشاط في الجزء العلوي الحزمة الخلفية ليست مثيلاً حاليًا للنشاط).

    على سبيل المثال، لنفترض أن الحزمة الخلفية للمهمة تتكون من النشاط الجذر A مع الأنشطة B وC وD في الأعلى (بحيث تكون المكدس A-B-C-D، مع D في الأعلى). النية للوصول إلى نشاط من النوع د. إذا كان D لديه ميزة التشغيل التلقائية لـ ""standard"" الوضع، يتم إطلاق مثيل جديد للفئة، وتصبح المكدس A-B-C-D-D. ومع ذلك، إذا كان وضع تشغيل D هو "singleTop"، فإن المثيل الحالي لـ D يتلقى النية من خلال onNewIntent()، لأنها موجودة في الجزء العلوي من المكدس، وتظل المكدس A-B-C-D. إذا، من ناحية أخرى، يصل intent لنشاط من النوع B، ثم تُضاف مثيل جديد من B إلى الحزمة حتى إذا كان وضع تشغيلها هو "singleTop".

  3. "singleTask"
    ينشئ النظام النشاط في جذر مهمة جديدة أو يحدد موقع نشاط في مهمة حالية بنفس التقارب. إذا كان مثال هناك نشاط موجود بالفعل، فسيوجه النظام الغرض من المثيل الحالي من خلال استدعاء الدالة onNewIntent() بدلاً من إنشاء مثيل جديد. في غضون ذلك، تتدمير الأنشطة فوقها.
  4. "singleInstance".
    يشبه السلوك في نظام التشغيل "singleTask"، باستثناء أن النظام لا يشغِّل أي برامج أخرى الأنشطة في المهمة التي تحتفظ بالمثيل. يكون النشاط دائمًا عضو واحد فقط في مهمته. يتم فتح أي أنشطة بدأتها في مهمة منفصلة
  5. "singleInstancePerTask".
    لا يمكن تشغيل النشاط إلا كالنشاط الجذري للمهمة، وهو النشاط الأول الذي أدى إلى إنشاء المهمة، وبالتالي لا يمكن أن يكون هناك سوى مثيل واحد من هذا النشاط في مهمة ما. وعلى عكس وضع التشغيل في singleTask، يمكن بدء النشاط في حالات متعددة في مهام مختلفة إذا FLAG_ACTIVITY_MULTIPLE_TASK أو FLAG_ACTIVITY_NEW_DOCUMENT تم ضبط العلامة

ومثال آخر على ذلك، يشير تطبيق متصفح Android إلى أن متصفح الويب يفتح النشاط دائمًا في مهمته الخاصة من خلال تحديد singleTask وضع بدء التشغيل في <activity> العنصر. يعني هذا أنّه إذا أصدر تطبيقك نية فتح نظام التشغيل Android في المتصفح، لا يتم وضع نشاطه في المهمة نفسها التي يضعها تطبيقك. بدلاً من ذلك، بدء مهمة جديدة للمتصفّح أو إذا كانت هناك مهمة تعمل في الخلفية، يتم تقديم هذه المهمة للتعامل مع والنية.

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

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

لمزيد من المعلومات حول استخدام أوضاع التشغيل في ملف البيان، يمكنك الاطّلاع على مستندات عناصر <activity>

تحديد أوضاع الإطلاق باستخدام علامات Intent

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

FLAG_ACTIVITY_NEW_TASK

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

ينتج عن ذلك السلوك نفسه الذي ينتج عن "singleTask". تمت مناقشة قيمة launchMode في القسم السابق.

FLAG_ACTIVITY_SINGLE_TOP

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

ينتج عن ذلك السلوك نفسه الذي ينتج عن "singleTop". قيمة launchMode التي تمت مناقشتها في القسم السابق.

FLAG_ACTIVITY_CLEAR_TOP

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

لا تتوفّر قيمة للسمة launchMode التي تنتج هذا السلوك.

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

التعامل مع الاهتمامات المشتركة

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

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

يمكنك تعديل الجمهور ذي الاهتمامات المشتركة لنشاط باستخدام taskAffinity. السمة <activity> العنصر.

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

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

  1. عندما يحتوي الغرض الذي يبدأ تشغيل نشاط ما على FLAG_ACTIVITY_NEW_TASK .

    يتم إطلاق نشاط جديد بشكل افتراضي في مهمة النشاط يسمى startActivity() يتم إرسالها إلى الحزمة الخلفية نفسها التي يستخدمها المتصل.

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

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

    إذا كان هناك كيان خارجي قد فاستخدام هذه العلامة قد يؤدي إلى استدعاء نشاطك، لذا احرص على أن يكون لدى المستخدم مستقلة للعودة إلى بالمهمة التي بدأت، مثلاً عن طريق رمز مشغّل التطبيقات، حيث يُظهر نشاط الجذر للمهمة CATEGORY_LAUNCHER فلتر الأهداف. لمزيد من المعلومات، راجِع القسم المتعلّق ببدء المهام.

  2. عندما يكون للنشاط allowTaskReparenting تم تعيين السمة على "true".

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

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

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

محو الحزمة الخلفية

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

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

alwaysRetainTaskState
عند ضبط هذه السمة على "true" في النشاط الجذر لمهمة، سيتم السلوك الافتراضي الموضح للتوّ. تحتفظ المهمة بجميع الأنشطة في حزمتها حتى بعد فترة طويلة.
clearTaskOnLaunch

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

finishOnTaskLaunch

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

بدء مَهمّة

يمكنك إعداد نشاط كنقطة دخول لمهمة ما من خلال منحه هدفًا الفلترة باستخدام "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 الفلتر.

لتتخيل، على سبيل المثال، ما قد يحدث في حالة عدم وجود الفلتر: يشغِّل intent نشاط "singleTask" ويبدأ مهمة جديدة ويبدأ المستخدم. بعض الوقت في العمل في تلك المهمة. بعد ذلك يستخدم المستخدم زر الصفحة الرئيسية أو إيماءة. يتم الآن إرسال المهمة إلى الخلفية ولن تكون مرئية. الآن يمكن للمستخدم طريقة للعودة إلى المهمة، لأنها غير ممثلة في التطبيق المستخدم.

بالنسبة لتلك الحالات التي لا تريد أن يتمكن المستخدم من العودة إلى نشاط، اضبط <activity> العنصر finishOnTaskLaunch إلى "true". لمزيد من المعلومات، يُرجى الاطِّلاع على القسم المتعلق بمحو حزمة الظهر.

مزيد من المعلومات حول كيفية تمثيل المهام والأنشطة وإدارتها في شاشة "الأخيرة" ضمن العناصر الأخيرة الشاشة.

مزيد من المراجع