Ön plan hizmeti zaman aşımları

Uygulama Android 15 veya sonraki sürümleri hedefliyorsa sistem, uygulamanız arka plandayken belirli ön plan hizmetlerinin ne kadar süre ç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 hizmet türünde daha kısıtlayıcı sınırlar vardır. Bunlar, ilgili hizmet türünün dokümanlarında ele alınmış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 ön plan hizmet türü, Android 15'te eklenmiştir.) Altı saatlik süre sınırı, dataSync ve mediaProcessing hizmetleri için ayrı ayrı takip edilir. Örneğin, bir dataSync hizmeti yalnızca bir saat çalıştıysa uygulama, dataSync ön plan hizmetleri için yalnızca beş saat, mediaProcessing hizmetleri için ise tam altı saat kullanılabilir.

Ön plan hizmeti altı saatlik sınıra ulaştığında Service.stopSelf() yöntemini çağırmak için birkaç saniyesi olur. Sistem Service.onTimeout() yöntemini çağırdığında hizmet artık ön plan hizmeti olarak kabul edilmez. Hizmet Service.stopSelf() yöntemini çağırmazsa sistem dahili bir istisna oluşturur. İstisna, Logcat'e şu mesajla 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:

  1. Hizmetinizin yeni Service.onTimeout(int, int) yöntemini uygulamasını sağlayın. Uygulamanız geri çağırma işlemini aldığında birkaç saniye içinde stopSelf() yöntemini çağırdığınızdan emin olun. (Uygulamayı hemen durdurmazsanız sistem bir hata oluşturur.)
  2. Uygulamanızın dataSync ve mediaProcessing hizmetlerinin 24 saatlik bir süre içinde toplamda 6 saatten fazla çalışmadığından emin olun (kullanıcı uygulamayla etkileşime girmediği sürece zamanlayıcı sıfırlanır).
  3. dataSync veya mediaProcessing ön plan hizmetlerini yalnızca doğrudan kullanıcı etkileşimi sonucunda başlatın. Hizmet başladığında uygulamanız ön planda olduğundan hizmetiniz, uygulama arka plana geçtikten sonra tam altı saat boyunca çalışır.
  4. Bu ön plan hizmetleri yerine WorkManager gibi alternatif bir API kullanın. Özellikle dataSync ön plan hizmeti yerine alternatif bir API kullanabilirsiniz.

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 ön plan hizmeti türü için süre sınırı zaten doldu" gibi bir hata mesajıyla ForegroundServiceStartNotAllowedException hatası verir.

Test

Uygulamanızın davranışını test etmek için uygulamanız Android 15'i hedeflemese bile (uygulama Android 15 cihazda çalıştığı sürece) 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ıra ulaşı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