Jika aplikasi menargetkan Android 15 atau yang lebih tinggi, sistem akan menerapkan
pembatasan pada durasi layanan latar depan tertentu yang diizinkan untuk berjalan saat
aplikasi Anda berada di latar belakang. Saat ini, pembatasan ini hanya berlaku untuk
layanan latar depan
dataSync
dan
jenis layanan latar depan mediaProcessing
. Ada batasan yang lebih ketat pada jenis layanan latar depan
shortService
yang dibahas dalam dokumentasi
jenis layanan tersebut.
Perilaku waktu tunggu
Sistem mengizinkan layanan latar depan dataSync
dan mediaProcessing
berjalan
selama total 6 jam dalam periode 24 jam, setelah itu sistem akan memanggil
metode Service.onTimeout(int, int)
layanan yang berjalan
(diperkenalkan di Android 15). (Jenis layanan latar depan
mediaProcessing
ditambahkan di Android 15.) Batas waktu enam jam
dilacak secara terpisah untuk layanan dataSync
dan mediaProcessing
. Misalnya, jika layanan dataSync
baru saja berjalan selama satu jam, aplikasi hanya akan memiliki
lima jam yang tersedia untuk layanan latar depan mediaProcessing
, tetapi akan
memiliki enam jam penuh
yang tersedia untuk layanan dataSync
.
Saat layanan latar depan mencapai batas enam jam, layanan memiliki beberapa
detik untuk memanggil Service.stopSelf()
. Saat sistem memanggil
Service.onTimeout()
, layanan tidak lagi dianggap sebagai layanan latar depan.
Jika layanan tidak memanggil Service.stopSelf()
, sistem akan menampilkan pengecualian
internal. Pengecualian dicatat dalam log di Logcat dengan pesan
berikut:
Fatal Exception: android.app.RemoteServiceException: "A foreground service of
type [service type] did not stop within its timeout: [component name]"
Untuk menghindari masalah terkait perubahan perilaku ini, Anda dapat melakukan satu atau beberapa hal berikut:
- Minta layanan Anda menerapkan metode
Service.onTimeout(int, int)
baru. Saat aplikasi Anda menerima callback, pastikan untuk memanggilstopSelf()
dalam beberapa detik. (Jika Anda tidak segera menghentikan aplikasi, sistem akan menghasilkan kegagalan.) - Pastikan layanan
dataSync
danmediaProcessing
aplikasi Anda tidak berjalan selama lebih dari total 6 jam dalam periode 24 jam (kecuali jika pengguna berinteraksi dengan aplikasi, mereset timer). - Hanya mulai layanan latar depan
dataSync
ataumediaProcessing
sebagai hasil interaksi pengguna langsung; karena aplikasi Anda berada di latar depan saat layanan dimulai, layanan Anda memiliki enam jam penuh setelah aplikasi beralih ke latar belakang. - Daripada menggunakan layanan latar depan ini, gunakan API
alternatif, seperti WorkManager. Secara khusus, pertimbangkan untuk menggunakan
API alternatif, bukan menggunakan
layanan latar depan
dataSync
.
Jika layanan latar depan dataSync
aplikasi Anda telah berjalan selama 6 jam dalam 24
jam terakhir, Anda tidak dapat memulai layanan latar depan dataSync
lain kecuali pengguna
telah memindahkan aplikasi Anda ke latar depan (yang mereset timer). Jika Anda mencoba
memulai layanan latar depan dataSync
lainnya, sistem akan menampilkan
ForegroundServiceStartNotAllowedException
dengan pesan error seperti "Batas waktu sudah habis untuk jenis layanan latar depan
dataSync".
Pengujian
Untuk menguji perilaku aplikasi, Anda dapat mengaktifkan waktu tunggu sinkronisasi data meskipun aplikasi
tidak menargetkan Android 15 (asalkan aplikasi berjalan di perangkat
Android 15). Untuk mengaktifkan waktu tunggu, jalankan perintah adb
berikut:
adb shell am compat enable FGS_INTRODUCE_TIME_LIMITS your-package-name
Anda juga dapat menyesuaikan periode waktu tunggu, untuk memudahkan pengujian perilaku
aplikasi saat batas tercapai. Untuk menetapkan periode waktu tunggu baru untuk
layanan latar depan dataSync
, jalankan perintah adb
berikut:
adb shell device_config put activity_manager data_sync_fgs_timeout_duration duration-in-milliseconds
Untuk menetapkan periode waktu tunggu baru untuk layanan latar depan mediaProcessing
, jalankan perintah
ini:
adb shell device_config put activity_manager media_processing_fgs_timeout_duration duration-in-milliseconds