Android 10 (level API 29) dan yang lebih baru memberikan batasan kapan aplikasi dapat memulai aktivitas saat aplikasi berjalan di latar belakang. Batasan ini membantu meminimalkan gangguan untuk pengguna dan memberikan kontrol yang lebih menyeluruh kepada pengguna atas konten yang ditampilkan di layar.
Panduan ini menyajikan notifikasi sebagai alternatif untuk memulai aktivitas dari latar belakang. Panduan ini juga mencantumkan kasus tertentu saat batasan tidak berlaku.
Menampilkan notifikasi
Dalam hampir semua kasus, aplikasi di latar belakang harus menampilkan notifikasi mendesak untuk memberikan informasi penting kepada pengguna, bukan langsung memulai aktivitas. Notifikasi tersebut mencakup penanganan panggilan telepon masuk atau jam alarm aktif.
Sistem pemberitahuan dan pengingat berbasis notifikasi ini memberikan beberapa manfaat kepada pengguna:
- Saat menggunakan perangkat, pengguna akan melihat notifikasi pendahuluan yang memungkinkan mereka merespons. Pengguna mempertahankan konteks saat ini dan memiliki kontrol atas konten yang ditampilkan di layar.
- Notifikasi mendesak mematuhi aturan Jangan Ganggu pengguna. Misalnya, pengguna mungkin hanya mengizinkan panggilan telepon dari kontak tertentu atau dari penelepon berulang saat fitur Jangan Ganggu diaktifkan.
- Saat layar perangkat nonaktif, intent layar penuh akan segera diluncurkan.
- Di layar Setelan perangkat, pengguna dapat melihat aplikasi mana yang baru-baru ini telah mengirim notifikasi, termasuk dari saluran notifikasi tertentu. Dari layar ini, pengguna dapat mengontrol preferensi notifikasi.
Kapan aplikasi dapat memulai aktivitas
Aplikasi yang berjalan di Android 10 atau yang lebih baru dapat memulai aktivitas jika satu atau beberapa kondisi berikut terpenuhi:
Aplikasi memiliki jendela yang terlihat, seperti aktivitas di latar depan.
Aplikasi memiliki aktivitas di back stack tugas latar depan.
Aplikasi memiliki aktivitas di back stack tugas yang ada di layar Terbaru.
Aplikasi memiliki aktivitas yang dimulai baru-baru ini.
Aplikasi memanggil
finish()pada suatu aktivitas baru-baru ini. Ini hanya berlaku jika aplikasi memiliki aktivitas di latar depan atau di back stack tugas latar depan ketikafinish()dipanggil.Aplikasi memiliki salah satu layanan berikut yang dibatasi oleh sistem. Layanan ini mungkin perlu meluncurkan UI.
AccessibilityServiceAutofillServiceCallRedirectionServiceHostApduServiceInCallServiceTileService(Tidak berlaku di Android 14 (level API 34) dan yang lebih tinggi)VoiceInteractionServiceVrListenerService.
Aplikasi memiliki layanan yang dibatasi oleh aplikasi lain yang terlihat. Aplikasi yang terikat ke layanan harus tetap terlihat oleh aplikasi di latar belakang agar aktivitas berhasil dimulai.
Aplikasi menerima notifikasi
PendingIntentdari sistem. Apabila terdapat intent yang tertunda untuk layanan dan penerima siaran, aplikasi dapat memulai aktivitas selama beberapa detik setelah intent yang tertunda tersebut dikirimkan.Aplikasi menerima
PendingIntentyang dikirim dari aplikasi lain yang terlihat.Aplikasi menerima siaran sistem yang aplikasinya diperkirakan meluncurkan UI. Contohnya mencakup
ACTION_NEW_OUTGOING_CALLdanSECRET_CODE_ACTION. Aplikasi ini dapat memulai aktivitas selama beberapa detik setelah siaran dikirim.Aplikasi dikaitkan dengan perangkat hardware pendamping melalui
CompanionDeviceManagerAPI. API ini memungkinkan aplikasi untuk memulai aktivitas sebagai respons atas tindakan yang dijalankan pengguna pada perangkat yang tersambung.Aplikasi adalah pengontrol kebijakan perangkat yang berjalan dalam mode pemilik perangkat. Contoh kasus penggunaan ini mencakup perangkat perusahaan terkelola sepenuhnya serta perangkat khusus seperti reklame digital dan kios.
Aplikasi diberi izin
SYSTEM_ALERT_WINDOWoleh pengguna.
Ikut serta diperlukan saat memulai aktivitas dari PendingIntent
Untuk menghindari dimulainya Aktivitas yang tidak disengaja berdasarkan kondisi yang tercantum, mulai Android 14 ada API eksplisit yang memungkinkan Anda ikut serta atau tidak ikut serta dalam memberikan izin aplikasi untuk memulai Aktivitas.
Aplikasi yang menargetkan Android 15 atau yang lebih tinggi secara default tidak lagi memberikan hak istimewa peluncuran aktivitas latar belakang (BAL) secara implisit ke PendingIntents yang dibuatnya. Ikut serta secara eksplisit diperlukan. Untuk melakukannya, berikut adalah opsi yang bergantung pada apakah aplikasi mengirim atau membuat PendingIntents.
Oleh Pengirim PendingIntent
Aplikasi yang menargetkan Android 14 atau yang lebih tinggi dan ingin memulai PendingIntent harus
- memenuhi kondisi yang tercantum dan
- ikut serta untuk mengizinkan peluncuran aktivitas latar belakang berdasarkan pengecualian tersebut
Ikut serta ini hanya boleh terjadi jika developer aplikasi mengetahui bahwa aplikasi akan memulai Aktivitas.
Untuk ikut serta, aplikasi harus meneruskan paket ActivityOptions dengan
setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
ke PendingIntent.send() atau metode serupa.
Oleh Pembuat PendingIntent
Aplikasi yang menargetkan Android 15 atau yang lebih tinggi dan membuat PendingIntent kini harus
secara eksplisit ikut serta untuk mengizinkan peluncuran aktivitas latar belakang jika ingin
PendingIntents tersebut dapat dimulai dalam kondisi yang tercantum.
Dalam sebagian besar kasus, aplikasi yang memulai PendingIntent harus ikut serta.
Namun, jika aplikasi pembuat perlu memberikan hak istimewa ini:
PendingIntentdapat dimulai kapan saja aplikasi pembuat terlihat.PendingIntentdapat dimulai kapan saja jika aplikasi pembuat memiliki hak istimewa khusus.
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 selengkapnya:
ActivityOptions.setPendingIntentBackgroundActivityStartModeActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode
Mode Ketat
Mulai Android 16, developer aplikasi dapat mengaktifkan Mode ketat untuk mendapatkan notifikasi saat peluncuran aktivitas diblokir (atau berisiko diblokir saat SDK target aplikasi ditingkatkan).
Contoh kode untuk mengaktifkan dari awal di metode Application.onCreate() Aplikasi, Aktivitas, atau komponen aplikasi lainnya:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
StrictMode.setVmPolicy(
StrictMode.VmPolicy.Builder()
.detectBlockedBackgroundActivityLaunch()
.penaltyLog()
.build());
)
}
Baca dokumentasi Mode ketat untuk mengetahui detail selengkapnya.