משימה היא אוסף של פעילויות שמשתמשים מקיימים איתן אינטראקציה כשהם מנסים לבצע לבצע פעולה כלשהי באפליקציה. הפעילויות האלה מסודרות במקבץ שנקרא מקבץ חזרה לפי הסדר שבו נפתח כל פעילות.
לדוגמה, אפליקציית אימייל עשויה לכלול פעילות אחת כדי להציג רשימה של הודעות חדשות. כשהמשתמש בוחר הודעה, תיפתח פעילות חדשה כדי להציג את ההודעה הזו. הפעילות החדשה הזו נוספה למקבץ האחורי. לאחר מכן, כשהמשתמש מקיש על הפעילות החדשה או מסמן אותה, מסתיים ונעלם מהמקבץ.
מחזור החיים של משימה והערימה הקודמת שלה
מסך הבית של המכשיר הוא נקודת ההתחלה של רוב המשימות. כשמשתמש נוגע סמל האפליקציה או קיצור הדרך במרכז האפליקציות או במסך הבית, שהמשימה של האפליקציה הזו מגיעה לחזית. אם לא קיימת משימה לאפליקציה, אז נוצרת משימה חדשה, והמשימה הראשית פעילות של אותה אפליקציה נפתחת בתור פעילות השורש בסטאק.
כשהפעילות הנוכחית תתחיל מחדש, הפעילות החדשה תועבר למעלה. של הערימה ומושקעת בפוקוס. הפעילות הקודמת נשארה במקבץ, אבל הופסק. כשפעילות נפסקת, המערכת שומרת על המצב הנוכחי שלה ממשק משתמש גרפי. כשהמשתמש מבצע את פעולת החזרה, הפעילות הנוכחית היא קופצת מהחלק העליון של הערימה ומושמדת. הפעילות הקודמת ממשיכה, והמצב הקודם של ממשק המשתמש שלו ישוחזר.
פעילויות במסגרת הערימה אף פעם לא מסודרות מחדש, אלא רק מועברות בדחיפה או מוקפצות מהמקבץ כפי שהן התחיל בפעילות הנוכחית והמשתמש נסגר באמצעות לחצן 'הקודם' או תנועה. לכן המקבץ הקודם פועל כ- מבנה אובייקט מסוג האחרון והראשון. איור 1 מציג ציר זמן עם פעילויות שנדחפות אליהם ומופיעות מתוך מקבץ אחורי.
![](https://developer.android.com/static/images/fundamentals/diagram_backstack.png?authuser=8&hl=he)
כשהמשתמש ממשיך להקיש על 'חזרה' או להזיז אותה, כל פעילות במקבץ היא התכונה 'חלון קופץ' מופצת כדי לחשוף את הקודם, עד שהמשתמש חוזר לדף הבית במסך או לפעילות שרצה כשהמשימה התחילה. אחרי שהכל הפעילויות יוסרו מהמקבץ, המשימה לא קיימת יותר.
אופן הפעולה של הקשה אחורה לפעילויות של מרכז האפליקציות ברמה הבסיסית
פעילויות במרכז האפליקציות ברמה הבסיסית (root) הן פעילויות שמצהירות על כוונת רכישה שלהן
מסנן עם שניהם
ACTION_MAIN
וגם
CATEGORY_LAUNCHER
.
הפעילויות האלה ייחודיות כי הן משמשות כנקודות כניסה לאפליקציה מ
במרכז האפליקציות ומשמשים להפעלת משימה.
כשמשתמש מקיש או עושה תנועות חזרה מפעילות בסיסית של מרכז האפליקציות, המערכת תטפל באירוע באופן שונה, בהתאם לגרסת Android המכשיר פועל.
- התנהגות המערכת ב-Android מגרסה 11 ומטה
- המערכת מסיימת את הפעילות.
- התנהגות המערכת ב-Android מגרסה 12 ואילך
המערכת מעבירה את הפעילות ואת המשימה שלה לרקע במקום סיום הפעילות. ההתנהגות הזאת תואמת להתנהגות ברירת המחדל של המערכת כאשר כשיוצאים מאפליקציה באמצעות לחצן דף הבית או תנועה.
ברוב המקרים, המשמעות של ההתנהגות הזו היא שהמשתמשים יכולים להמשיך להפעיל את האפליקציה במהירות רבה יותר ממצב חמים, צורך להפעיל מחדש את האפליקציה במצב קר .
אם אתם צריכים לספק ניווט מותאם אישית אחורה, מומלץ להשתמש בממשקי ה-API של הפעילות של AndroidX במקום לשנות
onBackPressed()
. ממשקי ה-API של AndroidX Activity דוחים באופן אוטומטי או התנהגות המערכת המתאימה אם אין רכיבים שמיירטים את המערכת הקשה 'חזרה'.אבל אם האפליקציה מחליפה
onBackPressed()
לטיפול ניווט חזרה והשלמת הפעילות. יש לעדכן את ההטמעה כדי להתקשר עדsuper.onBackPressed()
במקום לסיים. ביצוע שיחה במקרים הבאים,super.onBackPressed()
מעביר את הפעילות והמשימה שלה לרקע הולם ומספק חוויית ניווט עקבית יותר למשתמשים בכל האפליקציות.
משימות ברקע ובחזית
![](https://developer.android.com/static/images/fundamentals/diagram_multitasking.png?authuser=8&hl=he)
משימה היא יחידה מאוחדת ויכולה לעבור לרקע כשהמשתמש מתחיל או מעבר למסך הבית. בזמן הפעילות ברקע, כל הפעילויות המשימה הופסקה, אבל הערימה האחורית של המשימה נשארת ללא שינוי. מאבד את המיקוד בעת ביצוע משימה אחרת, כפי שמוצג באיור 2. א' המשימה יכולה לחזור לחזית כך שהמשתמשים יוכלו להמשיך מהמקום שבו הם יצאו מושבתת.
נבחן את התהליך הבא במשימה א' הנוכחית כולל שלוש פעילויות במקבץ שלו, כולל שתי פעילויות בפעילות הנוכחית:
המשתמש משתמש בלחצן או בתנועה של דף הבית, ולאחר מכן מפעיל אפליקציה חדשה מרכז האפליקציות.
כשמסך הבית מופיע, משימה א' עוברת ברקע. כשהמודל החדש האפליקציה מופעלת, המערכת מתחילה משימה לאפליקציה הזו (משימה ב') בסטאק משלה פעילויות.
אחרי האינטראקציה עם האפליקציה, המשתמש חוזר שוב ל-Home ובוחר את אפליקציה שהפעילה במקור את משימה א'.
עכשיו משימה א' מגיעה לחזית – כל שלוש הפעילויות במקבץ שלה ללא שינוי, והפעילות שבחלק העליון של הערימה תמשיך. בשלב הזה המשתמש יכול גם לחזור למשימה ב' על ידי חזרה לדף הבית ובחירה בסמל האפליקציה שהתחילו את המשימה, או על ידי בחירה במשימה של האפליקציה בכרטיסייה משימות אחרונות .
מופעים מרובים של פעילות
![](https://developer.android.com/static/images/fundamentals/diagram_multiple_instances.png?authuser=8&hl=he)
כי הפעילויות שבמקבץ האחורי אף פעם לא מסודרות מחדש, אם האפליקציה שלכם מאפשרת למשתמשים להתחיל פעילות מסוימת מכמה פעילות, של פעילות זו נוצר והועבר למקבץ, במקום העברת כל מופע קודם של הפעילות לראש הרשימה. לכן, ייתכן שתיווצר מופע של הפעילות באפליקציה מספר פעמים, גם משימות שונות, כפי שמתואר באיור 3.
אם המשתמש מנווט אחורה באמצעות לחצן 'הקודם' לחצן או תנועה, מופעי הפעילות נחשפו לפי הסדר שבו הם מופיעים נפתחה, ולכל אחת מהן יש מצב ממשק משתמש משלה. אבל אפשר לשנות את זה אם אתם לא רוצים שפעילות נוצרת יותר מפעם אחת. נושאי לימוד למידע נוסף בנושא זה, בקטע ניהול למשימות סיווג.
סביבות מרובות חלונות
כשאפליקציות פועלות בו-זמנית בחלונות מרובים עם חלונות מרובים סביבת פרסום, נתמכת ב-Android 7.0 (API ברמה 24) ואילך, המערכת מנהלת משימות בנפרד לכל חלון. כל אחד יכולות להיות כמה משימות בחלון הזה. כלל זה חל גם על אפליקציות ל-Android שפועלות ב- מכשירי Chromebook: המערכת מנהלת משימות או קבוצות של משימות לכל חלון בנפרד.
סיכום של מחזור החיים
כדי לסכם את התנהגות ברירת המחדל של פעילויות ומשימות:
כשפעילות א' מתחילה את פעילות ב', פעילות א' נעצרת אבל המערכת שומרת את המצב שלה, כמו מיקום הגלילה וכל טקסט שהוזן בטפסים. אם המיקום המשתמש מקיש או משתמש בתנועת 'הקודם' במהלך פעילות ב', פעילות א' חוזר והמצב שלו משוחזר.
כשהמשתמש עוזב משימה באמצעות הלחצן הראשי או התנועה, הפעילות מופסקת והמשימה מועברת לרקע. המערכת שומרת במצב של כל פעילות במשימה. אם המשתמש ימשיך במשימה בשלב מאוחר יותר ב- בחירה בסמל מרכז האפליקציות שהתחיל את המשימה, המשימה בחזית הערימה וממשיכים את הפעילות.
אם המשתמש יקיש על 'הקודם' או יסמן אותו בתנועת 'הקודם', הפעילות הנוכחית "תקפוץ מ" את הערימה ותושמד. הפעילות הקודמת במקבץ תמשיך. מתי פעילות נמחקת, המערכת לא שומרת את מצב הפעילות.
ההתנהגות הזו שונה בפעילויות של מרכז האפליקציות ברמה הבסיסית כשהאפליקציה פועלת במכשיר עם Android מגרסה 12 ואילך.
אפשר ליצור מופע של פעילויות כמה פעמים, גם ממשימות אחרות.
ניהול משימות
מערכת Android מנהלת את המשימות ואת הערימה האחורית על ידי הצבת כל הפעילויות שהתחילו ברצף באותה משימה, בפעם האחרונה, את סטאק. זה עובד טוב עבור רוב האפליקציות, ובדרך כלל אין צורך לדאוג האופן שבו הפעילויות שלכם משויכות למשימות או האופן שבו הן קיימות מאחור סטאק.
עם זאת, ייתכן שתחליטו שרוצים להפסיק את ההתנהגות הרגילה. לדוגמה, יכול להיות שתרצו שפעילות באפליקציה תתחיל להתחיל משימה חדשה בתהליך, במקום להופיע במשימה הנוכחית. או, כשמתחילים ייתכן שתרצו להעביר מופע קיים של אותה פעילות, ליצור מכונה חדשה מעל המקבץ האחורי. או אולי אתם רוצים למחוק את המקבץ האחורי מכל הפעילויות מלבד פעילות ברמה הבסיסית (root) כשהמשתמש עוזב את המשימה.
אפשר לבצע את הפעולות האלה ועוד באמצעות מאפיינים
<activity>
רכיב מניפסט
וסימונים בכוונת המשתמש שמעבירים
startActivity()
אלה המאפיינים הראשיים <activity>
שבהם אפשר להשתמש כדי לנהל משימות:
taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch
בנוסף, אלה הדגלים של Intent של חשבון ראשי שבהם אפשר להשתמש:
בקטעים הבאים נסביר איך להשתמש במאפייני המניפסט ודגלי Intent כדי להגדיר איך פעילויות משויכות למשימות, ואיך הן להתנהג בערימה האחורית.
בנוסף, נדון בשיקולים הקשורים לאופן שבו משימות ופעילויות מיוצגים ומנוהלים במסך 'אחרונים'. בדרך כלל אפשר לתת להגדיר את האופן שבו המשימה והפעילויות שלכם מיוצגות המסך האחרון שלנו, ואין צורך לשנות את ההתנהגות הזו. לקבלת מידע נוסף מידע נוסף, ראו מסך השיחות האחרונות.
הגדרת מצבי הפעלה
מצבי הפעלה מאפשרים להגדיר איך משויך מופע חדש של פעילות במשימה הנוכחית. תוכלו להגדיר מצבי הפעלה בשתי דרכים, בסעיפים הבאים:
-
כשאתם מצהירים על פעילות בקובץ המניפסט, אפשר לציין איך הפעילות משייכת למשימות כשהיא מתחילה.
-
כשמתקשרים
startActivity()
אפשר לכלול דגלIntent
שמציין איך (או אם) הפעילות החדשה תשויך למשימה הנוכחית.
לכן, אם פעילות א' מתחילה את פעילות ב', פעילות ב' יכולה להגדיר במניפסט. האופן שבו הוא משויך למשימה הנוכחית, ופעילות א' יכולה להשתמש בדגל Intent כדי לבקש איך פעילות ב' תוכל לשייך למשימה הנוכחית.
אם גם וגם הפעילויות מגדירות איך פעילות ב' משויכת למשימה, ואז פעילות א' בקשה, כפי שמוגדר בכוונה, תכובד ביחס לבקשה של פעילות ב', וכן מוגדר במניפסט שלו.
הגדרת מצבי הפעלה באמצעות קובץ המניפסט
כשמצהירים על פעילות בקובץ המניפסט, אפשר לציין איך
משויך למשימה באמצעות
של הרכיב <activity>
launchMode
.
יש חמישה מצבי הפעלה שאפשר להקצות למאפיין launchMode
:
"standard"
- מצב ברירת המחדל. המערכת יוצרת מופע חדש של הפעילות במשימה ממנו הוא התחיל ומנתב את הכוונה אליו. הפעילות יכולה להיות כמה פעמים, כל מכונה יכולה להשתייך למשימות שונות, למשימה אחת יכולים להיות כמה מופעים.
"singleTop"
- אם מופע של הפעילות כבר קיים בחלק העליון של המשימה הנוכחית,
המערכת מנתבת את הכוונה אל המכונה באמצעות קריאה
onNewIntent()
במקום ליצור מופע חדש של הפעילות. הפעילות היא כמה פעמים, כל מכונה יכולה להשתייך למשימות שונות, ולמשימה אחת יכולים להיות כמה מופעים (אבל רק אם הפעילות בחלק העליון של הדף) של המקבץ האחורי הוא לא מופע קיים של הפעילות).
לדוגמה, נניח שהמקבץ האחורי של משימה מורכב מפעילות בסיס א' עם את הפעילויות ב', ג' וד' למעלה (כלומר, הערימה היא A-B-C-D ו-D מעליה). כוונה מגיע לפעילות מסוג D. אם ל-D יש את הפעלות ברירת המחדל של
"standard"
מופע חדש של המחלקה מופעל, והסטאק הופך ל-A-B-C-D-D. אבל אם מצב ההפעלה של D הוא"singleTop"
, המופע הקיים של D הוא מקבל את ה-Intent דרךonNewIntent()
, כי הוא נמצא בחלק העליון של הערימה והוא נשאר A-B-C-D אם, לעומת זאת, מגיע לפעילות מסוג B, ואז מופע חדש של B יתווסף הסטאק גם אם מצב ההשקה שלו הוא"singleTop"
."singleTask"
- המערכת יוצרת את הפעילות ברמה הבסיסית (root) של משימה חדשה או מאתרת את
פעילות במשימה קיימת עם אותו תחום עניין משותף. אם מופע של
כבר קיימת, המערכת מנתבת
את ה-Intent למכונה הקיימת באמצעות קריאה
onNewIntent()
במקום ליצור מכונה חדשה. בינתיים, כל שאר המשתמשים פעילויות מעליו מושמדות.
"singleInstance"
.- אופן הפעולה זהה לזה של
"singleTask"
, אבל המערכת לא מפעילה שום מנגנון אחר במשימה שמכילה את המכונה. הפעילות היא תמיד אדם אחד בלבד במשימה. כל הפעילויות שהתחילו בדף הזה ייפתחו ב- במשימה נפרדת.
"singleInstancePerTask"
.- הפעילות יכולה לפעול רק כפעילות הבסיסית של המשימה.
הפעילות שיצרה את המשימה, ולכן יכול להיות רק מופע אחד.
בפעילות הזאת במשימה. בניגוד למצב ההפעלה של
singleTask
, כאן יכולה להתחיל בכמה מופעים במשימות שונות,FLAG_ACTIVITY_MULTIPLE_TASK
אוFLAG_ACTIVITY_NEW_DOCUMENT
התכונה הניסיונית מוגדרת.
דוגמה נוספת, באפליקציית הדפדפן ל-Android מצהירה שדפדפן האינטרנט
הפעילות תמיד נפתחת במשימה משלה על ידי ציון singleTask
במצב ההשקה ב<activity>
לרכיב מסוים. המשמעות היא שאם האפליקציה שלך מנפיקה Intent לפתיחת אפליקציית Android
בדפדפן, הפעילות שלו לא משויכת לאותה משימה כמו האפליקציה שלכם. במקום זאת,
מתחילה משימה חדשה עבור הדפדפן, או אם הדפדפן כבר כולל משימה
פועלת ברקע, המשימה מועברת קדימה
בכוונה טובה.
בין אם פעילות מסוימת מתחילה במשימה חדשה ובין אם היא באותה משימה
הפעילות שהתחילה, לחצן 'הקודם' והתנועה תמיד לוקחים את
לפעילות הקודמת. אבל אם מתחילים פעילות
מציין
מצב ההפעלה singleTask
ומופע של הפעילות הזו קיים
המשימה ברקע, וכל המשימה מועברת לחזית. בשלב הזה,
המקבץ הקודם כולל את כל הפעילויות מהמשימה קדימה
בראש הערימה. איור 4 מציג תרחיש כזה.
![](https://developer.android.com/static/images/fundamentals/diagram_backstack_singletask_multiactivity.png?authuser=8&hl=he)
"singleTask"
יתווסף למקבץ האחורי. אם הפעילות
הוא כבר חלק ממשימה ברקע עם מקבץ גיבוי משלה,
כל המקבץ 'הקודם' גם מגיע קדימה, מעל
משימה.מידע נוסף על השימוש במצבי הפעלה בקובץ המניפסט זמין ב
תיעוד של רכיבי <activity>
.
הגדרת מצבי הפעלה באמצעות דגלים של Intent
כשמתחילים פעילות, אפשר לשנות את השיוך שמוגדר כברירת מחדל לפעילות
במשימה על ידי הכללת סימונים בכוונות
startActivity()
הדגלים שבהם אפשר להשתמש כדי לשנות את התנהגות ברירת המחדל הם:
FLAG_ACTIVITY_NEW_TASK
המערכת תתחיל את הפעילות במשימה חדשה. אם משימה כבר פועלת פעילות שהמשימה התחילה, היא מועברת לחזית באמצעות המצב האחרון שוחזר, והפעילות מקבלת את ה-Intent החדש
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>
כי המערכת משתמשת בשם הזה כדי לזהות את משימת ברירת המחדל
תחום עניין משותף לאפליקציה.
תחום העניין הזה נכנס לתוקף בשתי נסיבות:
כאשר הכוונה שמפעילה פעילות כוללת את
FLAG_ACTIVITY_NEW_TASK
לסמן.כברירת מחדל, פעילות חדשה מופעלת במשימה של הפעילות. קראו
startActivity()
השיחה מוצמדת לאותה מקבץ אחורי כמו המתקשר/ת.עם זאת, אם הכוונה שהועברה אל
startActivity()
מכילה אתFLAG_ACTIVITY_NEW_TASK
היא תחפש משימה אחרת שתארח את הפעילות החדשה. לעיתים קרובות, זו משימה חדשה. עם זאת, זו לא חייבת להיות. אם יש משימה קיימת עם תחום עניין משותף הזהה לזו של הפעילות החדשה, הפעילות למשימה הזו. אחרת, תתחיל משימה חדשה.אם הדגל הזה גורם לפעילות להתחיל משימה חדשה והמשתמש משתמש הלחצן הראשי או התנועה ליציאה ממנו, חייב להיות דרך כלשהי למשתמש חזרה למשימה. ישויות מסוימות, כמו מנהל ההתראות, להתחיל פעילויות במשימה חיצונית, אף פעם לא כחלק ממשימה חיצונית, הם תמיד מוסיפים את
FLAG_ACTIVITY_NEW_TASK
לכוונות שהם מעביריםstartActivity()
.אם ישות חיצונית עשויה השתמשו בדגל הזה כדי להפעיל את הפעילות שלכם, ודאו שלמשתמש יש דרך עצמאית לחזור המשימה שהתחילה, למשל באמצעות סמל מרכז האפליקציות, שבו פעילות הבסיס של למשימה יש
CATEGORY_LAUNCHER
מסנן Intent. למידע נוסף, ראו התחלת משימות.כשלפעילות יש
allowTaskReparenting
מוגדר ל-"true"
.במקרה כזה, הפעילות יכולה לעבור מהמשימה שהיא התחילה למשימה שבה היא התחילה זיקה שבה המשימה מגיעה לחזית.
לדוגמה, נניח שפעילות שמדווחת על תנאי מזג האוויר ב- ערים נבחרות מוגדרות כחלק מאפליקציית נסיעות. תחום העניין הזה זהה כמו פעילויות אחרות באותה אפליקציה, תחום העניין המשותף המוגדר כברירת מחדל, והוא יכול יוגדר להיות הורה מחדש באמצעות המאפיין הזה.
כשאחת מהפעילויות מתחילה, פעילות של דיווחי מזג אוויר, היא שייכת בהתחלה לאותה משימה כמו זו פעילות. עם זאת, כשהמשימה של אפליקציית הנסיעות נמצאת בחזית, הפעילות של דיווחי מזג האוויר מוקצית מחדש למשימה הזו ומוצגת בתוכה.
ניקוי המקבץ האחורי
אם המשתמש עוזב את המשימה למשך זמן רב, המערכת מוחקת את המשימה פעילויות מלבד פעילות השורש. כשהמשתמש חוזר למשימה, רק הפעילות ברמה הבסיסית תשוחזר. המערכת פועלת כך בהתאם בהנחה שאחרי משך זמן ארוך שבו משתמשים נטשו את מה שהם עשו לפני וחוזרים למשימה כדי להתחיל משהו חדש.
יש כמה מאפייני פעילות שאפשר להשתמש בהם כדי לשנות התנהגות זו:
alwaysRetainTaskState
- כשהמאפיין הזה מוגדר ל-
"true"
בפעילות הבסיסית של משימה, לא מתרחשת פעולת ברירת המחדל שמתוארת עכשיו. במשימה יישמרו כל הנתונים פעילויות במקבץ שלו גם אחרי תקופה ארוכה. clearTaskOnLaunch
כשהמאפיין הזה מוגדר לערך
"true"
בפעילות הבסיסית של משימה, המשימה הנתונים עוברים לפעילות ברמה הבסיסית (root) בכל פעם שהמשתמש עוזב את המשימה חוזרים אליו. במילים אחרות, ההפךalwaysRetainTaskState
המשתמש תמיד חוזר למשימה במצב הראשוני שלה, גם אחרי שעזב את רק רגע.finishOnTaskLaunch
המאפיין הזה נראה כך:
clearTaskOnLaunch
, אבל הוא פועל על פעילות אחת, ולא על משימה שלמה. היא יכולה גם לגרום כל פעילות לסיום מלבד פעילות ברמה הבסיסית (root). כשההגדרה הזו מוגדרת לערך"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>
מסנן Intent מהסוג הזה גורם לסמל ולתווית של הפעילות להציג במרכז האפליקציות, וכך המשתמשים יכולים להפעיל את הפעילות לחזור למשימה שהיא יוצרת בכל שלב לאחר ההשקה.
היכולת השנייה הזו חשובה. למשתמשים צריכה להיות אפשרות לעזוב משימה
לחזור אליו מאוחר יותר באמצעות מרכז האפליקציות הזה. לכן, השתמשו רק
שני הסוגים
מצבי הפעלה שמסמנים פעילויות כי הן תמיד מתחילות משימה, "singleTask"
ו-"singleInstance"
, כשהפעילות כוללת
ACTION_MAIN
CATEGORY_LAUNCHER
לדוגמה, מה עשוי לקרות אם היה חסר מסנן:
Intent מפעיל פעילות "singleTask"
, מתחיל משימה חדשה, והמשתמש
מקדיש זמן לביצוע המשימה הזו. לאחר מכן המשתמש משתמש בלחצן דף הבית או
תנועה. המשימה נשלחת לרקע ולא רואים אותה. עכשיו המשתמש
אין דרך לחזור למשימה, כי היא לא מיוצגת באפליקציה
במרכז האפליקציות.
במקרים שבהם אתם לא רוצים שהמשתמש יוכל לחזור
פעילות, מגדירים את <activity>
finishOnTaskLaunch
של הרכיב
אל "true"
. למידע נוסף, עיינו בסעיף ניקוי הערימה הקודמת.
מידע נוסף על האופן שבו משימות ופעילויות מיוצגות ומנהלים אותן במסך 'אחרונים' זמין בתוצאות אחרונות .