התנהגות ההפעלה של הפעילות מוגדרת לפי מצבי ההפעלה בקובצי 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()
.