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

ลักษณะการทำงานในการเปิดตัวกิจกรรมกำหนดโดยโหมดการเปิดตัวในไฟล์ AndroidManifest.xml ของแอป แฟล็ก Intent และ ActivityOptions ที่ผู้เรียกใช้ระบุ ใช้ ActivityOption#setLaunchDisplayId(int) เพื่อกำหนดเป้าหมายการแสดงผลที่เฉพาะเจาะจงสำหรับการเปิดตัวกิจกรรม

  • โดยค่าเริ่มต้น กิจกรรมจะเปิดตัวในการแสดงผลเดียวกับผู้เรียกใช้ ตัวอย่างเช่น อินสแตนซ์ใหม่ของกิจกรรมที่เริ่มต้นจากตัวเรียกใช้แอปควรวางไว้ในการแสดงผลเดียวกันโดยไม่มีแฟล็กหรือตัวเลือกเพิ่มเติม ตรวจสอบว่าคุณใช้บริบทที่ถูกต้อง (กิจกรรมเทียบกับแอปพลิเคชัน) สำหรับการเปิดตัว
  • หากการเปิดตัวดำเนินการจากแหล่งที่มาซึ่งไม่ได้เชื่อมโยงกับการแสดงผลที่เฉพาะเจาะจง (เช่น จากเชลล์หรือบริบทของแอปพลิเคชัน) ระบบจะวางกิจกรรมไว้ในการแสดงผลด้านบนที่ผู้ใช้โต้ตอบกับอุปกรณ์ล่าสุด หรือจากที่ที่เปิดตัวกิจกรรมล่าสุด
  • Intent ในการเปิดตัวกิจกรรมสามารถแก้ไขเป็นอินสแตนซ์กิจกรรมที่มีอยู่ในระบบได้ ในกรณีดังกล่าว หากไม่มีการระบุแฟล็กเพิ่มเติม กิจกรรมจะปรากฏในการแสดงผลเดียวกันกับที่ใช้ล่าสุด หากมีการระบุการแสดงผลเป้าหมายด้วย 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()