ลักษณะการเริ่มกิจกรรม ถูกกำหนดโดยโหมดการเริ่มในไฟล์ 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()