החל מ-27 במרץ 2025, מומלץ להשתמש ב-android-latest-release
במקום ב-aosp-main
כדי ליצור תרומות ל-AOSP. מידע נוסף זמין במאמר שינויים ב-AOSP.
המדיניות בנושא השקת פעילויות
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
התנהגות ההפעלה של הפעילות מוגדרת לפי מצבי ההפעלה בקובצי 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()
.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Activity launch policy\n\n*Activity launch behavior* is defined by launch modes in the\n`AndroidManifest.xml` files of apps, intent flags, and ActivityOptions\nprovided by the caller. Use `ActivityOption#setLaunchDisplayId(int)` to\ntarget a specific display for activity launch.\n\n- By default, the activity launches on the same display as the caller. For example, a new instance of an activity started from the launcher should be placed on the same display without additional flags or options. Be sure to use the correct context (Activity versus Application) for launch.\n- If the launch is performed from a source not associated with a specific display (such as from a shell or Application context), then the activity is placed on the top display on which the user last interacted with the device or from which the last activity was launched.\n- Intent to launch an activity can be resolved to an existing activity instance in the system. In such a case, if no additional flags were provided, an activity surfaces on the same display where it was last used. If the target display is specified with `ActivityOptions#setTargetDisplayId()`, then the activity is moved to that display (if allowed by security and other restrictions).\n\nSecurity restrictions\n---------------------\n\nTo prevent a malicious app from misappropriating user-sensitive information\nby reading it from the surface of a virtual display that it has created, apps can\nlaunch their own activities *only* on a virtual display of their creation\nin Android 10. However:\n\n- System components with the `INTERNAL_SYSTEM_WINDOW` permission can launch on any display.\n- Callers with the `ACTIVITY_EMBEDDING` permission can launch activities from other apps that have the flag `ActivityInfo.FLAG_ALLOW_EMBEDDED`.\n- Activity launches on private displays are allowed only for the owner or activities present on that display.\n\nSimilar restrictions apply to adding windows to displays.\n\nAndroid 10 includes the\n`ActivityManager#isActivityStartAllowedOnDisplay(Context context, int\ndisplayId, Intent intent)` method to check security restrictions for the\napp before attempting to launch on a display. In Android 9\n(and lower), restricted launch results throw `SecurityException`.\n\nMost security restrictions are applied in the\n`ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()` method."]]