Pembatasan pada memulai aktivitas dari latar belakang

Android 10 (API level 29) dan batasan tempat yang lebih tinggi tentang kapan aplikasi dapat dimulai aktivitas saat aplikasi berjalan di latar belakang. Pembatasan ini membantu meminimalkan gangguan bagi pengguna dan membuat pengguna lebih terkendali atas apa yang ditampilkan di layar mereka.

Panduan ini menyajikan notifikasi sebagai alternatif untuk memulai aktivitas dari latar belakang. Contoh ini juga mencantumkan kasus tertentu di mana pembatasan itu tidak mendaftar.

Tampilkan notifikasi

Dalam hampir semua kasus, aplikasi di latar belakang harus menampilkan notifikasi mendesak untuk memberikan informasi mendesak kepada pengguna alih-alih langsung memulai suatu aktivitas. Notifikasi tersebut termasuk menangani panggilan telepon masuk atau alarm aktif jam.

Sistem peringatan dan pengingat berbasis notifikasi ini memberikan beberapa keuntungan untuk pengguna:

  • Saat menggunakan perangkat, pengguna akan melihat notifikasi pendahuluan yang memungkinkan mereka merespons. Pengguna mempertahankan konteks saat ini dan memiliki kontrol atas konten yang mereka lihat di layar.
  • Notifikasi mendesak memperhatikan Aturan Jangan Ganggu. Sebagai misalnya, pengguna mungkin mengizinkan panggilan hanya dari kontak tertentu atau dari panggilan berulang penelepon saat mode Jangan Ganggu diaktifkan.
  • Saat layar perangkat nonaktif, intent layar penuh diluncurkan segera.
  • Di layar Setelan perangkat, pengguna dapat melihat aplikasi mana yang telah notifikasi yang baru saja dikirim, termasuk dari saluran notifikasi tertentu. Dari layar ini, pengguna dapat mengontrol preferensi notifikasi mereka.

Kapan aplikasi dapat memulai aktivitas

Aplikasi yang berjalan di Android 10 atau yang lebih tinggi dapat memulai aktivitas saat satu atau beberapa kondisi berikut terpenuhi:

  • Aplikasi memiliki jendela yang terlihat, seperti aktivitas di latar depan.
  • Aplikasi ini memiliki aktivitas di data sebelumnya dari tugas latar depan.
  • Aplikasi ini memiliki aktivitas di data sebelumnya tugas yang ada di Layar terbaru.

  • Aplikasi memiliki aktivitas yang dimulai baru-baru ini.

  • Aplikasi bernama finish() di suatu aktivitas baru-baru ini. Ini hanya berlaku bila aplikasi memiliki aktivitas di latar depan atau aktivitas di data sebelumnya tugas latar depan pada saat finish() dipanggil.

  • Aplikasi memiliki salah satu layanan berikut yang dibatasi oleh sistem. Ini layanan mungkin perlu meluncurkan UI.

  • Aplikasi memiliki layanan yang dibatasi oleh aplikasi lain yang terlihat. Aplikasi terikat ke layanan harus tetap terlihat oleh aplikasi di latar belakang agar memulai aktivitas dengan sukses.

  • Aplikasi menerima notifikasi PendingIntent dari sistem. Di beberapa kasus intent yang tertunda untuk layanan dan penerima siaran, aplikasi dapat memulai aktivitas selama beberapa detik setelah intent yang tertunda dikirim.

  • Aplikasi menerima PendingIntent yang dikirim dari server yang terlihat dan berbeda .

  • Aplikasi menerima siaran sistem yang mengharuskan aplikasi meluncurkan UI. Contohnya mencakup ACTION_NEW_OUTGOING_CALL dan SECRET_CODE_ACTION. Aplikasi ini dapat memulai aktivitas selama beberapa detik setelah siaran dikirim.

  • Aplikasi dikaitkan dengan perangkat hardware pendamping melalui CompanionDeviceManager API. API ini memungkinkan aplikasi memulai aktivitas sebagai respons terhadap tindakan yang dijalankan pada perangkat yang disambungkan.

  • Aplikasi adalah pengontrol kebijakan perangkat yang berjalan di mode pemilik perangkat. Contoh kasus penggunaan mencakup perangkat perusahaan yang terkelola sepenuhnya serta perangkat khusus seperti perangkat reklame dan kios.

  • Aplikasi diberi izin SYSTEM_ALERT_WINDOW oleh pengguna.

Keikutsertaan diperlukan saat memulai aktivitas dari PendingIntent

Untuk menghindari dimulainya Aktivitas yang tidak disengaja berdasarkan daftar aktivitas yang tercantum kondisi, mulai dari Android 14, tersedia API eksplisit yang memungkinkan Anda untuk memilih ikut serta atau tidak dalam memberikan izin aplikasi untuk memulai Aktivitas.

Aplikasi yang menargetkan Android 15 atau yang lebih tinggi akan ditetapkan secara default ke tidak lagi secara implisit memberikan hak istimewa peluncuran aktivitas latar belakang (BAL) kepada PendingIntents dia buat. Keikutsertaan eksplisit diperlukan. Untuk melakukannya, berikut opsi yang dapat dipilih bergantung apakah aplikasi mengirim atau membuat PendingIntents.

Tabel intent tertunda
Gambar 1: Alur keputusan untuk peluncuran aktivitas latar belakang.

Oleh Pengirim PendingIntent

Aplikasi yang menargetkan Android 14 atau yang lebih tinggi dan ingin memulai PendingIntent harus

  • memenuhi kondisi yang tercantum dan
  • memilih untuk mengizinkan peluncuran aktivitas latar belakang berdasarkan pengecualian tersebut

Keikutsertaan ini hanya boleh terjadi jika developer aplikasi mengetahui bahwa aplikasi tersebut akan memulai Aktivitas.

Untuk ikut serta, aplikasi harus meneruskan paket ActivityOptions dengan setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) dengan PendingIntent.send() atau metode serupa.

Oleh Pembuat PendingIntent

Aplikasi yang menargetkan Android 15 atau yang lebih tinggi yang membuat PendingIntent sekarang harus secara eksplisit memilih untuk mengizinkan peluncuran aktivitas latar belakang jika mereka menginginkannya PendingIntents dapat dimulai dalam kondisi yang tercantum.

Pada umumnya, aplikasi yang memulai PendingIntent harus menjadi aplikasi yang dipilih. Namun, jika aplikasi yang membuat perlu memberikan hak istimewa ini:

  • PendingIntent dapat dimulai kapan saja saat aplikasi pembuatan terlihat.
  • PendingIntent dapat dimulai kapan saja jika aplikasi yang dibuat memiliki hak istimewa pengguna.

Untuk ikut serta, aplikasi harus meneruskan paket ActivityOptions dengan setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) ke PendingIntent.getActivity() atau metode serupa.

Baca dokumentasi referensi yang relevan untuk mengetahui detail lebih lanjut: