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 tampilan 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 shell atau konteks Aplikasi), maka aktivitas akan ditempatkan di tampilan teratas tempat pengguna terakhir berinteraksi dengan perangkat atau tempat aktivitas terakhir diluncurkan.
  • Intent untuk meluncurkan aktivitas dapat diselesaikan ke instance aktivitas yang ada dalam sistem. Dalam kasus seperti itu, jika tidak ada tanda tambahan yang diberikan, aktivitas akan muncul di layar yang sama dengan tempat terakhir kali aktivitas tersebut digunakan. Jika target tampilan ditentukan dengan ActivityOptions#setTargetDisplayId(), maka aktivitas dipindahkan ke tampilan tersebut (jika diizinkan oleh keamanan dan batasan lainnya).

Batasan keamanan

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

  • Komponen sistem dengan izin INTERNAL_SYSTEM_WINDOW dapat diluncurkan di layar mana pun.
  • Pemanggil dengan izin ACTIVITY_EMBEDDING dapat meluncurkan aktivitas dari aplikasi lain yang memiliki tanda 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 aplikasi sebelum mencoba meluncurkan di layar. Di Android 9 (dan yang lebih rendah), peluncuran terbatas akan menghasilkan SecurityException.

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