นโยบายการเปิดตัวกิจกรรม

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