رفتار راهاندازی اکتیویتی توسط حالتهای راهاندازی در فایلهای AndroidManifest.xml برنامهها، پرچمهای intent و ActivityOptions ارائه شده توسط فراخواننده تعریف میشود. برای هدف قرار دادن یک نمایش خاص برای راهاندازی اکتیویتی، ActivityOption#setLaunchDisplayId(int) استفاده کنید.
- به طور پیشفرض، اکتیویتی در همان صفحهای که فراخوانیکننده اجرا میشود، اجرا میشود. برای مثال، یک نمونه جدید از یک اکتیویتی که از لانچر آغاز شده است، باید در همان صفحه نمایش و بدون پرچمها یا گزینههای اضافی قرار گیرد. حتماً از زمینه صحیح (Activity در مقابل Application) برای اجرا استفاده کنید.
- اگر اجرا از منبعی غیرمرتبط با نمایشگر خاصی (مانند پوسته یا زمینه برنامه) انجام شود، آنگاه اکتیویتی در بالاترین نمایشگری قرار میگیرد که کاربر آخرین بار با دستگاه در آن تعامل داشته یا آخرین اکتیویتی از آن اجرا شده است.
- قصد راهاندازی یک فعالیت میتواند به یک نمونه فعالیت موجود در سیستم تبدیل شود. در چنین حالتی، اگر هیچ پرچم اضافی ارائه نشده باشد، یک فعالیت در همان صفحه نمایشی که آخرین بار از آن استفاده شده است، نمایش داده میشود. اگر صفحه نمایش هدف با
ActivityOptions#setTargetDisplayId()مشخص شده باشد، فعالیت به آن صفحه نمایش منتقل میشود (در صورت مجاز بودن توسط امنیت و سایر محدودیتها).
محدودیتهای امنیتی
برای جلوگیری از سوءاستفاده یک برنامه مخرب از اطلاعات حساس کاربر با خواندن آن از سطح یک صفحه نمایش مجازی که ایجاد کرده است، برنامهها میتوانند فعالیتهای خود را فقط در یک صفحه نمایش مجازی از ساخته خود در اندروید ۱۰ راهاندازی کنند. با این حال:
- اجزای سیستم با مجوز
INTERNAL_SYSTEM_WINDOWمیتوانند روی هر نمایشگری اجرا شوند. - فراخوانیکنندگان با مجوز
ACTIVITY_EMBEDDINGمیتوانند فعالیتها را از برنامههای دیگری که پرچمActivityInfo.FLAG_ALLOW_EMBEDDEDرا دارند، اجرا کنند. - راهاندازی فعالیتها در نمایشگرهای خصوصی فقط برای مالک یا فعالیتهای حاضر در آن نمایشگر مجاز است.
محدودیتهای مشابهی برای افزودن پنجرهها به نمایشگرها اعمال میشود.
اندروید ۱۰ شامل متد ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) است تا محدودیتهای امنیتی برنامه را قبل از تلاش برای اجرا روی صفحه نمایش بررسی کند. در اندروید ۹ (و پایینتر)، نتایج اجرای محدود، خطای SecurityException را صادر میکنند.
بیشتر محدودیتهای امنیتی در متد ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay() اعمال میشوند.