Kebijakan peluncuran aktivitas

Perilaku peluncuran aktivitas ditentukan oleh mode peluncuran dalam file AndroidManifest.xml aplikasi, flag intent, dan ActivityOptions yang disediakan oleh pemanggil. Gunakan ActivityOption#setLaunchDisplayId(int) untuk menargetkan layar tertentu untuk peluncuran aktivitas.

  • Secara default, aktivitas diluncurkan di layar yang sama dengan pemanggil. Misalnya, instance baru aktivitas yang dimulai dari peluncur harus ditempatkan di layar yang sama tanpa flag atau opsi tambahan. Pastikan untuk menggunakan konteks yang benar (Aktivitas versus Aplikasi) untuk peluncuran.
  • Jika peluncuran dilakukan dari sumber yang tidak terkait dengan tampilan tertentu (seperti dari konteks shell atau Aplikasi), aktivitas akan ditempatkan pada layar atas tempat pengguna terakhir berinteraksi dengan perangkat, atau tempat aktivitas terakhir diluncurkan.
  • Intent untuk meluncurkan aktivitas dapat di-resolve ke instance aktivitas yang ada di sistem. Dalam kasus tersebut, jika tidak ada tanda tambahan yang diberikan, aktivitas akan muncul di layar yang sama dengan tempat aktivitas terakhir kali digunakan. Jika tampilan target ditetapkan dengan ActivityOptions#setTargetDisplayId(), aktivitas akan dipindahkan ke tampilan tersebut (jika diizinkan oleh keamanan dan pembatasan lainnya).

Pembatasan keamanan

Untuk mencegah aplikasi berbahaya menyalahgunakan informasi sensitif pengguna dengan membacanya dari platform tampilan virtual yang dibuatnya, aplikasi dapat meluncurkan aktivitasnya sendiri hanya pada tampilan virtual kreasinya di Android 10. Namun:

  • Komponen sistem dengan izin INTERNAL_SYSTEM_WINDOW dapat diluncurkan di layar apa pun.
  • Pemanggil dengan izin ACTIVITY_EMBEDDING dapat meluncurkan aktivitas dari aplikasi lain yang memiliki flag ActivityInfo.FLAG_ALLOW_EMBEDDED.
  • Peluncuran aktivitas di layar pribadi hanya diizinkan untuk pemilik atau aktivitas yang ada di layar tersebut.

Pembatasan serupa berlaku untuk menambahkan jendela ke layar.

Android 10 menyertakan metode ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) untuk memeriksa batasan keamanan bagi aplikasi sebelum mencoba diluncurkan di layar. Di Android 9 (dan yang lebih rendah), hasil peluncuran yang dibatasi akan menampilkan SecurityException.

Sebagian besar batasan keamanan diterapkan dalam metode ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay().