Android 15 veya sonraki sürümleri hedefleyen uygulamalarda sistem, uygulamanız arka plandayken belirli ön plan hizmetlerinin ne kadar süreyle çalışmasına izin verileceği konusunda kısıtlamalar uygular. Şu anda bu kısıtlama yalnızca dataSync
ve mediaProcessing
ön plan hizmeti türü ön plan hizmetleri için geçerlidir. shortService
ön plan hizmeti türü için daha kısıtlayıcı sınırlar vardır. Bu sınırlar, söz konusu hizmet türünün belgelerinde açıklanmıştır.
Zaman aşımı davranışı
Sistem, dataSync
ve mediaProcessing
ön plan hizmetlerinin 24 saatlik bir süre içinde toplam 6 saat çalışmasına izin verir. Bu sürenin sonunda sistem, çalışan hizmetin Service.onTimeout(int, int)
yöntemini çağırır
(Android 15'te kullanıma sunulmuştur). (mediaProcessing
foreground
service type, Android 15'te eklendi.) 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 dataSync
ön plan hizmetleri için yalnızca beş saati kalır ancak mediaProcessing
hizmetleri için altı saatin tamamı kullanılabilir.
Bir ön plan hizmeti altı saatlik sınıra ulaştığında hizmetin Service.stopSelf()
işlevini çağırmak için birkaç saniyesi olur. Sistem Service.onTimeout()
işlevini çağırdığında hizmet artık ön plan hizmeti olarak kabul edilmez.
Hizmet Service.stopSelf()
işlevini çağırmazsa sistem dahili bir istisna oluşturur. İstisna, Logcat'te aşağıdaki mesajla birlikte 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:
- Hizmetinizde yeni
Service.onTimeout(int, int)
yöntemini uygulayın. Uygulamanız geri aramayı aldığında birkaç saniye içindestopSelf()
işlevini çağırdığınızdan emin olun. (Uygulamayı hemen durdurmazsanız sistem hata oluşturur.) - Uygulamanızın
dataSync
vemediaProcessing
hizmetlerinin, herhangi bir 24 saatlik dönemde toplam 6 saatten fazla çalışmadığından emin olun (kullanıcı uygulamayla etkileşimde bulunup zamanlayıcıyı sıfırlamadığı sürece). - Yalnızca doğrudan kullanıcı etkileşimi sonucunda
dataSync
veyamediaProcessing
ön plan hizmetlerini başlatın. Hizmet başladığında uygulamanız ön planda olduğundan, uygulama arka plana geçtikten sonra hizmetiniz altı saat boyunca çalışmaya devam edebilir. - Bu ön plan hizmetlerini kullanmak yerine WorkManager gibi bir alternatif API kullanın. Özellikle
dataSync
ön plan hizmeti kullanmak yerine alternatif bir API kullanmayı düşünebilirsiniz.
Uygulamanızın dataSync
ön plan hizmetleri son 24 saat içinde 6 saat boyunca çalıştıysa kullanıcı uygulamanızı ön plana getirmediği sürece (bu işlem zamanlayıcıyı sıfırlar) başka bir dataSync
ön plan hizmeti başlatamazsınız. Başka bir dataSync
ön plan hizmeti başlatmaya çalışırsanız sistem, "dataSync türü için ön plan hizmetinde zaman sınırı zaten aşıldı" gibi bir hata mesajıyla ForegroundServiceStartNotAllowedException
oluşturur.
Test
Uygulamanız Android 15'i hedeflemiyor olsa bile (Android 15 cihazda çalıştığı sürece) uygulamanızın davranışını test etmek için veri senkronizasyonu zaman aşımlarını etkinleştirebilirsiniz. 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ır aşıldığında uygulamanızın nasıl davrandığını test etmeyi kolaylaştırmak için zaman aşımı süresini de 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 hizmetleri için yeni bir zaman aşımı süresi ayarlamak üzere şu komutu çalıştırın:
adb shell device_config put activity_manager media_processing_fgs_timeout_duration duration-in-milliseconds