Bir uygulama Android 15 veya sonraki sürümleri hedefliyorsa sistem, uygulamanız arka plandayken belirli ön plan hizmetlerinin ne kadar süre boyunca çalışabileceğine dair kısıtlamalar uygular. Şu anda bu kısıtlama yalnızca dataSync
ve mediaProcessing
ön plan hizmet türü ön plan hizmetleri için geçerlidir. shortService
ön plan hizmet türü için daha kısıtlayıcı sınırlar vardır. Bu hizmet türünün dokümanlarında bu sınırlar açıklanmaktadır.
Zaman aşımı davranışı
Sistem, dataSync
ve mediaProcessing
ön plan hizmetlerinin 24 saat içinde toplam 6 saat boyunca çalışmasına izin verir. Ardından sistem, çalışan hizmetin Service.onTimeout(int, int)
yöntemini çağırır (Android 15'te kullanıma sunulmuştur). (mediaProcessing
ön plan hizmeti türü Android 15'te eklenmiştir.) Altı saatlik zaman sınırı, dataSync
ve mediaProcessing
hizmetleri için ayrı ayrı izlenir. Örneğin, bir dataSync
hizmeti yalnızca bir saat çalıştıysa uygulamanın mediaProcessing
ön plan hizmetleri için yalnızca beş saati olur ancak dataSync
hizmetleri için tam altı saati olur.
Bir ön plan hizmeti altı saatlik sınıra ulaştığında, hizmetin Service.stopSelf()
işlevini çağırmak için birkaç saniyelik süresi vardır. Sistem Service.onTimeout()
çağırdığında, hizmet artık ön plan hizmeti olarak kabul edilmez.
Hizmet Service.stopSelf()
yöntemini çağırmıyorsa sistem bir dahili istisna uygular. İstisna, aşağıdaki mesajla Logcat'e kaydedilir:
Fatal Exception: android.app.RemoteServiceException: "A foreground service of
type [service type] did not stop within its timeout: [component name]"
Bu davranış değişikliğiyle ilgili sorunları önlemek için aşağıdakilerden birini veya daha fazlasını yapabilirsiniz:
- Hizmetinizin yeni
Service.onTimeout(int, int)
yöntemini uygulamasını sağlayın. Uygulamanız geri aramayı aldığında birkaç saniye içindestopSelf()
'ü aradığınızdan emin olun. (Uygulamayı hemen durdurmazsanız sistem bir hata oluşturur.) - Uygulamanızın
dataSync
vemediaProcessing
hizmetlerinin 24 saatlik bir dönemde toplam 6 saatten fazla çalışmadığından emin olun (kullanıcı uygulamayla etkileşime geçerek zamanlayıcıyı sıfırlamazsa). dataSync
veyamediaProcessing
ön plan hizmetlerini yalnızca doğrudan kullanıcı etkileşimi sonucunda başlatın. Hizmetiniz başladığında uygulamanız ön planda olduğundan, uygulamanız arka plana geçtikten sonra hizmetiniz altı saat boyunca çalışır.- Bu ön plan hizmetlerini kullanmak yerine WorkManager gibi bir alternatif API kullanın. Özellikle,
dataSync
ön plan hizmeti yerine alternatif bir API kullanmanız önerilir.
Uygulamanızın dataSync
ön plan hizmeti son 24 içinde 6 saat çalıştıysa kullanıcı uygulamanızı ön plana getirmediği sürece başka bir dataSync
ön plan hizmeti başlatamazsınız (bu durumda zamanlayıcı sıfırlanır). Başka bir dataSync
ön plan hizmeti başlatmaya çalışırsanız sistem, ForegroundServiceStartNotAllowedException
seçeneğini "dataSync ön plan hizmet türü için süre sınırı aşıldı" gibi bir hata mesajıyla bildirir.
Test
Uygulamanızın davranışını test etmek için uygulamanız Android 15'i hedeflemese bile veri senkronizasyonu zaman aşımlarını etkinleştirebilirsiniz (uygulama Android 15 cihazda çalışıyorsa). Zaman aşımlarını etkinleştirmek için aşağıdaki adb
komutunu çalıştırın:
adb shell am compat enable FGS_INTRODUCE_TIME_LIMITS your-package-name
Ayrıca, sınıra ulaşıldığında uygulamanızın nasıl davrandığını test etmeyi kolaylaştırmak için zaman aşımı süresini ayarlayabilirsiniz. dataSync
ön plan hizmetleri için yeni bir zaman aşımı süresi ayarlamak üzere aşağıdaki adb
komutunu çalıştırın:
adb shell device_config put activity_manager data_sync_fgs_timeout_duration duration-in-milliseconds
mediaProcessing
ön plan hizmeti için yeni bir zaman aşımı süresi ayarlamak isterseniz şu komutu çalıştırın:
adb shell device_config put activity_manager media_processing_fgs_timeout_duration duration-in-milliseconds