Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Dukungan Multi-Aplikasi

Android 7.0 menambahkan dukungan untuk menampilkan lebih dari satu aplikasi sekaligus. Pada perangkat genggam, dua aplikasi dapat berjalan berdampingan atau atas-bawah dalam mode layar terpisah. Pada perangkat TV, aplikasi dapat menggunakan mode picture-in-picture untuk melanjutkan pemutaran video saat pengguna berinteraksi dengan aplikasi lain.

Bila aplikasi menargetkan Android 7.0 (API level 24) atau yang lebih tinggi, Anda dapat mengonfigurasi cara aplikasi menangani tampilan multi-aplikasi. Misalnya, Anda dapat menetapkan dimensi minimum aktivitas yang diizinkan. Anda juga dapat menonaktifkan tampilan multi-aplikasi untuk aplikasi, sehingga memastikan sistem hanya menampilkan aplikasi dalam mode layar penuh.

Ringkasan

Android memungkinkan beberapa aplikasi berbagi layar sekaligus. Misalnya, pengguna dapat membagi layar, melihat halaman web di sisi kiri sambil menulis email di sisi kanan. Pengalaman pengguna bergantung pada versi Android OS dan jenis perangkat:

  • Perangkat genggam yang menjalankan Android 7.0 menawarkan mode layar terpisah. Dalam mode ini, sistem mengisi layar dengan dua aplikasi yang ditampilkan secara berdampingan atau atas-bawah. Pengguna dapat menarik garis pembagi yang memisahkan keduanya untuk membuat satu aplikasi lebih besar dan yang lainnya lebih kecil.
  • Mulai dari Android 8.0, aplikasi dapat dengan sendirinya beralih ke mode picture-in-picture, sehingga dapat terus menampilkan konten sementara pengguna menjelajahi atau berinteraksi dengan aplikasi lain.
  • Produsen perangkat berukuran lebih besar dapat memilih untuk mengaktifkan mode format bebas, yang memungkinkan pengguna bebas mengubah ukuran setiap aktivitas. Jika produsen mengaktifkan fitur ini, perangkat akan menawarkan mode format bebas selain mode layar terpisah.

Gambar 1. Dua aplikasi berjalan berdampingan dalam mode layar terpisah.

Pengguna dapat beralih ke mode multi-aplikasi dengan cara berikut:

  • Jika membuka layar Ringkasan dan menekan lama judul aktivitas, pengguna dapat menarik aktivitas tersebut ke bagian yang disorot pada layar untuk mengalihkan aktivitas ke mode multi-aplikasi.
  • Jika pengguna menekan lama tombol Ringkasan, perangkat akan mengalihkan aktivitas saat ini ke mode multi-aplikasi, dan membuka layar Ringkasan sehingga pengguna dapat memilih aktivitas lain yang akan berbagi layar.

Pengguna dapat menarik lalu melepas data dari satu aktivitas ke yang lainnya saat aktivitas berbagi layar.

Siklus Proses Multi-Aplikasi

Mode multi-aplikasi tidak mengubah siklus proses aktivitas.

Dalam mode multi-aplikasi, hanya aktivitas yang paling sering digunakan pengguna yang akan aktif pada waktu tertentu. Aktivitas ini dianggap utama, dan merupakan satu-satunya aktivitas dalam status RESUMED. Semua aktivitas lain yang terlihat STARTED, tetapi tidak RESUMED. Namun, bagi sistem aktivitas yang terlihat tetapi tidak dilanjutkan ini memiliki prioritas lebih tinggi daripada aktivitas yang tidak terlihat. Jika pengguna berinteraksi dengan salah satu aktivitas yang terlihat, aktivitas tersebut akan dilanjutkan, dan aktivitas utama sebelumnya akan memasuki status STARTED.

Catatan: Dalam mode multi-aplikasi, aplikasi mungkin tidak dalam status RESUMED meskipun terlihat oleh pengguna. Suatu aplikasi mungkin harus melanjutkan operasinya saat tidak menjadi yang utama. Misalnya, aplikasi yang memutar video dalam status ini harus terus menampilkan videonya. Karena alasan ini, kami menyarankan aktivitas yang memutar video tidak menjeda pemutaran video sebagai respons terhadap peristiwa siklus proses ON_PAUSE. Sebagai gantinya, aktivitas akan memulai pemutaran sebagai respons terhadap ON_START, dan menjeda pemutaran sebagai respons terhadap ON_STOP. Jika Anda menangani peristiwa siklus proses secara langsung dan bukan menggunakan paket Siklus proses, jeda pemutaran video di pengendali onStop(), lalu lanjutkan pemutaran di onStart().

Bila pengguna mengalihkan aplikasi ke mode multi-aplikasi, sistem akan memberi tahu aktivitas tentang perubahan konfigurasi, sebagaimana disebutkan dalam Menangani Perubahan Konfigurasi. Hal ini juga terjadi bila pengguna mengubah ukuran aplikasi, atau mengalihkan aplikasi kembali ke mode layar penuh. Pada dasarnya, perubahan ini memiliki implikasi siklus proses aktivitas yang sama seperti saat sistem memberi tahu aplikasi bahwa perangkat telah beralih dari mode potret ke mode lanskap, kecuali dimensi perangkat telah berubah, bukan hanya ditukar. Sebagaimana dibahas dalam Menangani Perubahan Konfigurasi, aktivitas dapat menangani perubahan konfigurasi itu sendiri, atau mengizinkan sistem menghancurkan aktivitas dan membuatnya kembali dengan dimensi baru.

Jika pengguna mengubah ukuran jendela dan membuat dimensinya lebih besar, sistem akan mengubah ukuran aktivitas untuk menyesuaikan dengan tindakan pengguna dan memunculkan perubahan konfigurasi sesuai kebutuhan. Jika aplikasi mengalami keterlambatan dalam menggambar di area yang baru ditampilkan, sistem akan mengisi sementara area tersebut dengan warna yang ditetapkan oleh atribut windowBackground atau atribut gaya windowBackgroundFallback default.

Mengonfigurasi Aplikasi untuk Mode Multi-Aplikasi

Jika aplikasi menargetkan API level 24 atau yang lebih tinggi, Anda dapat mengonfigurasi cara dan apakah aktivitas aplikasi mendukung tampilan multi-aplikasi. Anda dapat menetapkan atribut dalam manifes untuk mengontrol ukuran dan tata letak. Setelan atribut aktivitas root berlaku untuk semua aktivitas dalam stack tugasnya. Misalnya, jika aktivitas root memiliki android:resizeableActivity yang ditetapkan ke true, maka semua aktivitas dalam stack tugas dapat diubah ukurannya.

Catatan: Jika Anda mem-build aplikasi multi-orientasi yang menargetkan API level 23 yang atau lebih rendah, dan pengguna menggunakan aplikasi dalam mode multi-aplikasi, sistem akan mengubah ukuran aplikasi secara paksa. Sistem menampilkan kotak dialog yang memperingatkan pengguna bahwa aplikasi mungkin berperilaku tidak terduga. Sistem tidak mengubah ukuran aplikasi berorientasi tetap; jika pengguna berusaha membuka aplikasi berorientasi tetap saat dalam mode multi-aplikasi, aplikasi akan menggunakan seluruh layar.

android:resizeableActivity

Tetapkan atribut ini dalam elemen <activity> atau <application> manifes untuk mengaktifkan atau menonaktifkan tampilan multi-aplikasi:

android:resizeableActivity=["true" | "false"]

Jika atribut ini ditetapkan ke true, aktivitas dapat diluncurkan dalam mode layar terpisah dan format bebas. Jika atribut ini ditetapkan ke false, aktivitas tidak akan mendukung mode multi-aplikasi. Jika nilainya adalah false dan pengguna mencoba meluncurkan aktivitas dalam mode multi-aplikasi, maka aktivitas tersebut akan mengambil alih layar penuh.

Jika aplikasi menargetkan API level 24 atau yang lebih tinggi, tetapi Anda tidak menetapkan nilai untuk atribut ini, nilai atribut akan kembali ke default true.

android:supportsPictureInPicture

Tetapkan atribut ini ke node <activity> manifes untuk menunjukkan apakah aktivitas mendukung tampilan Picture-in-Picture. Atribut ini diabaikan jika android:resizeableActivity bernilai false.

android:supportsPictureInPicture=["true" | "false"]

Atribut tata letak

Dengan Android 7.0, elemen manifes <layout> mendukung beberapa atribut yang memengaruhi cara aktivitas berperilaku dalam mode multi-aplikasi:

android:defaultWidth
Lebar default aktivitas saat diluncurkan dalam mode format bebas.
android:defaultHeight
Tinggi default aktivitas saat diluncurkan dalam mode format bebas.
android:gravity
Penempatan awal aktivitas saat diluncurkan dalam mode format bebas. Lihat referensi Gravity untuk mengetahui nilai yang cocok.
android:minHeight, android:minWidth
Tinggi dan lebar minimum untuk aktivitas dalam mode layar terpisah dan format bebas. Jika pengguna memindahkan pembagi dalam mode layar terpisah untuk membuat aktivitas lebih kecil dari batas minimum yang ditetapkan, sistem akan memangkas aktivitas sesuai ukuran yang diminta pengguna.

Misalnya, kode berikut menunjukkan cara menetapkan ukuran dan lokasi default aktivitas, serta ukuran minimumnya, bila aktivitas ditampilkan dalam mode format bebas:

<activity android:name=".MyActivity">
    <layout android:defaultHeight="500dp"
          android:defaultWidth="600dp"
          android:gravity="top|end"
          android:minHeight="450dp"
          android:minWidth="300dp" />
</activity>

Menangani perubahan konfigurasi dengan benar

Jika Anda menangani sendiri perubahan konfigurasi multi-aplikasi, seperti yang terjadi saat pengguna mengubah ukuran jendela, tambahkan atribut android:configChanges ke manifes dengan nilai yang setidaknya seperti berikut:

<activity
  android:name=".MyActivity"
  android:configChanges="screenSize|smallestScreenSize
      |screenLayout|orientation"
/>

Setelah menambahkan android:configChanges, Activity dan Fragments akan menerima callback ke onConfigurationChanged(), bukan dihancurkan dan dibuat ulang. Kemudian, Anda dapat memperbarui tampilan secara manual, memuat ulang resource, dan melakukan operasi lain sesuai kebutuhan.

Menjalankan Aplikasi dalam Mode Multi-Aplikasi

Mulai dari Android 7.0, sistem menawarkan fungsi untuk mendukung aplikasi yang dapat berjalan dalam mode multi-aplikasi.

Fitur yang dinonaktifkan dalam mode multi-aplikasi

Fitur tertentu akan dinonaktifkan atau diabaikan bila perangkat sedang dalam mode multi-aplikasi, karena dianggap tidak logis bagi suatu aktivitas yang mungkin berbagi layar perangkat dengan aktivitas atau aplikasi lainnya. Fitur tersebut mencakup:

  • Beberapa opsi penyesuaian UI Sistem dinonaktifkan; misalnya, aplikasi tidak dapat menyembunyikan status bar jika tidak berjalan dalam mode layar penuh.
  • Sistem mengabaikan perubahan pada atribut android:screenOrientation.

Notifikasi perubahan dan mengajukan kueri terkait multi-aplikasi

Activity menawarkan metode berikut untuk mendukung tampilan multi-aplikasi.

isInMultiWindowMode()
Panggil untuk mengetahui apakah aktivitas sedang dalam mode multi-aplikasi.
isInPictureInPictureMode()
Panggil untuk mengetahui apakah aktivitas sedang dalam mode picture-in-picture.

Catatan: Mode picture-in-picture adalah kasus khusus mode multi-aplikasi. Jika myActivity.isInPictureInPictureMode() menampilkan true, maka myActivity.isInMultiWindowMode() juga akan menampilkan true.

onMultiWindowModeChanged()
Sistem akan memanggil metode ini setiap kali aktivitas masuk atau keluar dari mode multi-aplikasi. Sistem akan meneruskan nilai true ke metode ini jika aktivitas memasuki mode multi-aplikasi, dan nilai false jika aktivitas keluar dari mode multi-aplikasi.
onPictureInPictureModeChanged()
Sistem akan memanggil metode ini setiap kali aktivitas masuk atau keluar dari mode picture-in-picture. Sistem akan meneruskan nilai true ke metode ini jika aktivitas memasuki mode picture-in-picture, dan nilai false jika aktivitas keluar dari mode picture-in-picture.

Class Fragment menampilkan versi berbagai metode ini, misalnya Fragment.onMultiWindowModeChanged().

Memasuki mode picture-in-picture

Untuk mengalihkan aktivitas ke mode picture-in-picture, panggil Activity.enterPictureInPictureMode(). Metode ini tidak berpengaruh jika perangkat tidak mendukung mode picture-in-picture. Untuk informasi selengkapnya, lihat dokumentasi Picture-in-Picture.

Meluncurkan Aktivitas Baru dalam Mode Multi-Aplikasi

Saat meluncurkan aktivitas baru, Anda dapat menunjukkan bahwa aktivitas baru harus ditampilkan berdampingan dengan aktivitas saat ini jika memungkinkan. Untuk melakukannya, gunakan tanda intent FLAG_ACTIVITY_LAUNCH_ADJACENT. Tanda ini memberi tahu sistem untuk mencoba membuat aktivitas baru di sebelah aktivitas yang meluncurkannya, sehingga kedua aktivitas tersebut berbagi layar. Sistem melakukan upaya terbaik untuk melakukannya, tetapi keberhasilannya tidak dijamin.

Jika perangkat sedang dalam mode format bebas dan Anda meluncurkan aktivitas baru, dimensi dan lokasi layarnya dapat ditetapkan dengan memanggil ActivityOptions.setLaunchBounds(). Metode ini tidak berpengaruh jika perangkat tidak sedang dalam mode multi-aplikasi.

Catatan: Jika Anda meluncurkan aktivitas dalam stack tugas, aktivitas tersebut akan menggantikan aktivitas pada layar, dan mewarisi semua properti multi-aplikasinya. Jika ingin meluncurkan aktivitas baru sebagai jendela terpisah dalam mode multi-aplikasi, Anda harus meluncurkannya dalam stack tugas baru.

Mendukung tarik lalu lepas

Pengguna dapat menarik lalu melepas data dari satu aktivitas ke aktivitas lainnya saat kedua aktivitas berbagi layar. (Sebelum Android 7.0, pengguna hanya dapat menarik lalu melepas data dalam satu aktivitas.) Karena alasan ini, Anda mungkin perlu menambahkan fungsi tarik lalu lepas jika saat ini aplikasi belum mendukungnya.

DragAndDropPermissions
Objek token bertanggung jawab menetapkan izin yang diberikan untuk aplikasi yang menerima pelepasan.
View.startDragAndDrop()
Alias untuk View.startDrag(). Untuk mengaktifkan tarik lalu lepas lintas aktivitas, teruskan flag DRAG_FLAG_GLOBAL. Jika Anda perlu memberikan izin URI untuk aktivitas penerima, teruskan tanda DRAG_FLAG_GLOBAL_URI_READ atau DRAG_FLAG_GLOBAL_URI_WRITE, sebagaimana mestinya.
View.cancelDragAndDrop()
Membatalkan operasi tarik yang sedang berlangsung. Hanya dapat dipanggil oleh aplikasi yang menghasilkan operasi tarik.
View.updateDragShadow()
Menggantikan bayangan tarik untuk operasi tarik yang sedang berlangsung. Hanya dapat dipanggil oleh aplikasi yang menghasilkan operasi tarik.
Activity.requestDragAndDropPermissions()
Meminta izin untuk URI konten yang diteruskan dengan ClipData yang terdapat dalam DragEvent.
DragAndDropPermissions.release()
Merilis izin yang diperlukan untuk mengakses data di URI konten yang diberikan dalam ClipData. Jika metode ini tidak dipanggil, izin akan dirilis secara otomatis saat aktivitas yang memuatnya dihancurkan.

Menguji Dukungan Multi-Aplikasi di Aplikasi

Baik aplikasi menargetkan API level 24 atau yang lebih tinggi maupun tidak, Anda harus memastikan perilaku aplikasi dalam mode multi-aplikasi bila pengguna mencoba meluncurkannya dalam mode multi-aplikasi di perangkat yang menjalankan Android 7.0 atau yang lebih tinggi.

Mengonfigurasi Perangkat Pengujian

Jika menjalankan Android 7.0 atau yang lebih tinggi, perangkat otomatis mendukung mode layar terpisah.

Jika aplikasi Anda menargetkan API level 23 atau yang lebih rendah

Jika aplikasi Anda menargetkan API level 23 atau yang lebih rendah dan pengguna mencoba menggunakan aplikasi dalam mode multi-aplikasi, sistem secara paksa akan mengubah ukuran aplikasi, kecuali jika aplikasi mendeklarasikan orientasi tetap.

Jika aplikasi tidak mendeklarasikan orientasi tetap, Anda harus meluncurkan aplikasi di perangkat yang menjalankan Android 7.0 atau yang lebih tinggi dan mencoba mengalihkan aplikasi tersebut ke mode layar terpisah. Pastikan pengalaman pengguna dapat diterima bila aplikasi diubah ukurannya secara paksa.

Jika aplikasi mendeklarasikan orientasi tetap, Anda harus mencoba mengalihkan aplikasi ke mode multi-aplikasi. Pastikan bahwa saat Anda melakukannya, aplikasi tetap dalam mode layar penuh.

Jika Anda mendukung mode multi-aplikasi

Jika aplikasi Anda menargetkan API level 24 atau yang lebih tinggi dan tidak menonaktifkan dukungan multi-aplikasi, pastikan perilaku berikut dalam mode layar terpisah dan mode format bebas.

  • Luncurkan aplikasi dalam mode layar penuh, lalu alihkan ke mode multi-aplikasi dengan menekan lama tombol Ringkasan. Pastikan apakah aplikasi beralih dengan benar.
  • Luncurkan aplikasi secara langsung dalam mode multi-aplikasi, dan pastikan bahwa aplikasi diluncurkan dengan benar. Anda dapat meluncurkan aplikasi dalam mode multi-aplikasi dengan menekan tombol Ringkasan, lalu menekan lama panel judul aplikasi dan menariknya ke salah satu area yang disorot pada layar.
  • Ubah ukuran aplikasi dalam mode layar terpisah dengan menarik garis pembagi. Pastikan apakah aplikasi mengubah ukuran tanpa error dan elemen UI yang diperlukan terlihat.
  • Jika Anda telah menetapkan dimensi minimum untuk aplikasi, coba ubah ukuran aplikasi di bawah dimensi tersebut. Pastikan bahwa Anda tidak dapat mengubah ukuran aplikasi menjadi lebih kecil dari batas minimum yang ditetapkan.
  • Melalui semua pengujian, pastikan bahwa performa aplikasi dapat diterima. Misalnya, pastikan bahwa tidak ada keterlambatan yang terlalu lama dalam mengupdate UI setelah ukuran aplikasi diubah.

Daftar periksa pengujian

Untuk memastikan performa aplikasi dalam mode multi-aplikasi, coba operasi berikut. Anda harus mencoba operasi ini dalam mode layar terpisah dan mode multi-aplikasi, kecuali jika dinyatakan lain.

  • Masuki dan keluar dari mode multi-aplikasi.
  • Alihkan dari aplikasi Anda ke aplikasi lain, dan pastikan bahwa aplikasi berperilaku sebagaimana mestinya saat terlihat tetapi tidak aktif. Misalnya, jika aplikasi Anda sedang memutar video, pastikan bahwa video terus diputar saat pengguna berinteraksi dengan aplikasi lain.
  • Dalam mode layar terpisah, coba geser garis pembagi untuk membuat aplikasi menjadi lebih besar dan lebih kecil. Coba operasi ini dalam konfigurasi berdampingan dan atas-bawah. Pastikan bahwa aplikasi tidak error, fungsi penting dapat terlihat, dan operasi ubah ukuran tidak memerlukan waktu terlalu lama.
  • Lakukan beberapa operasi ubah ukuran berturut-turut dalam waktu cepat. Pastikan bahwa aplikasi tidak error atau mengalami kebocoran memori. Untuk informasi tentang cara memeriksa penggunaan memori aplikasi, gunakan Memory Profiler di Android Studio.
  • Gunakan aplikasi secara normal di sejumlah konfigurasi jendela berbeda, dan pastikan bahwa aplikasi berperilaku sebagaimana mestinya. Pastikan bahwa teks terbaca, dan elemen UI tidak terlalu kecil untuk interaksi.

Jika Anda telah menonaktifkan dukungan multi-aplikasi

Jika Anda menonaktifkan dukungan multi-aplikasi dengan menetapkan android:resizeableActivity="false", Anda harus meluncurkan aplikasi di perangkat yang menjalankan Android 7.0 atau yang lebih tinggi dan mencoba mengalihkan aplikasi ke mode format bebas dan mode layar terpisah. Pastikan bahwa saat Anda melakukannya, aplikasi tetap dalam mode layar penuh.

Untuk informasi selengkapnya tentang dukungan multi-aplikasi di Android, lihat Lima Tips untuk Menyiapkan Multi-Aplikasi di Android N dan aplikasi contoh Playground Multi-Aplikasi.