המדיניות בנושא השקת פעילויות

התנהגות ההפעלה של הפעילות מוגדרת לפי מצבי ההפעלה בקובצי AndroidManifest.xml של האפליקציות, דגלי הכוונה ו-ActivityOptions שסופקו על ידי מבצע הקריאה החוזרת. משתמשים ב-ActivityOption#setLaunchDisplayId(int) כדי לטרגט מסך ספציפי להפעלת הפעילות.

  • כברירת מחדל, הפעילות מופעלת באותו מסך שבו נמצא מבצע הקריאה. לדוגמה, מכונה חדשה של פעילות שהתחילה ממרכז האפליקציות צריכה להיות ממוקמת באותו תצוגה ללא דגלים או אפשרויות נוספים. חשוב להשתמש בהקשר הנכון (פעילות לעומת אפליקציה) להפעלה.
  • אם ההפעלה מתבצעת ממקור שלא משויך למסך ספציפי (למשל, ממעטפת או מהקשר של אפליקציה), הפעילות ממוקמת במסך העליון שבו המשתמש ביצע את האינטראקציה האחרונה עם המכשיר או שממנו הפעילות האחרונה הופעל.
  • אפשר לפתור את הכוונה להפעיל פעילות למופעי פעילות קיימים במערכת. במקרה כזה, אם לא סיפקו דגלים נוספים, הפעילות תוצג באותו מסך שבו היא שימשה בפעם האחרונה. אם מסך היעד צוין באמצעות ActivityOptions#setTargetDisplayId(), הפעילות תועבר למסך הזה (אם האבטחה והמגבלות האחרות מאפשרות זאת).

הגבלות אבטחה

כדי למנוע מאפליקציה זדונית לנצל לרעה מידע אישי רגיש של משתמשים על ידי קריאת המידע מפני המסך הווירטואלי שהיא יצרה, אפליקציות יכולות להפעיל את הפעילויות שלהן רק במסך וירטואלי שהן יצרו ב-Android 10. עם זאת:

  • רכיבי מערכת עם ההרשאה INTERNAL_SYSTEM_WINDOW יכולים להופיע בכל מסך.
  • גורמים מבחוץ עם ההרשאה ACTIVITY_EMBEDDING יכולים להפעיל פעילויות מאפליקציות אחרות עם הדגל ActivityInfo.FLAG_ALLOW_EMBEDDED.
  • רק הבעלים של המסך הפרטי או הפעילויות שמוצגות בו יכולים להפעיל פעילויות.

הגבלות דומות חלות על הוספת חלונות למסכים.

ב-Android 10 יש את השיטה ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) לבדיקה של הגבלות האבטחה של האפליקציה לפני שמנסים להפעיל אותה במסך. ב-Android 9 (ומטה), תוצאות של השקה מוגבלת גורמות להשלכה של SecurityException.

רוב הגבלות האבטחה חלות בשיטה ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay().