Ön plan hizmeti zaman aşımları

Bir 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ğine kısıtlamalar getirir. Ş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 saatlik bir süre içinde toplam 6 saat çalışmasına izin verir. Bu sürenin ardından sistem, çalışan hizmetin Service.onTimeout(int, int) yöntemini (Android 15'te kullanıma sunulmuştur) çağırır. (mediaProcessing ön plan hizmet 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ı saat sınırına ulaştığında hizmetin Service.stopSelf() çağrısı yapmak için birkaç saniyesi vardır. Sistem Service.onTimeout() çağrısı yaptığında hizmet artık ön plan hizmeti olarak kabul edilmez. Hizmet Service.stopSelf()'ü çağırmazsa sistem dahili bir istisna oluşturur. İ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:

  1. Hizmetinizin yeni Service.onTimeout(int, int) yöntemini uygulamasını sağlayın. Uygulamanız geri aramayı aldığında birkaç saniye içinde stopSelf()'ü aradığınızdan emin olun. (Uygulamayı hemen durdurmazsanız sistem bir hata oluşturur.)
  2. Uygulamanızın dataSync ve mediaProcessing 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).
  3. dataSync veya mediaProcessing ö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.
  4. Bu ön plan hizmetlerini kullanmak yerine WorkManager gibi bir alternatif API kullanın. Özellikle, dataSync ön plan hizmeti 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 (bu durumda zamanlayıcı sıfırlanır) sürece başka bir dataSync ön plan hizmeti başlatamazsınız. Başka bir dataSync ön plan hizmetini başlatmaya çalışırsanız sistem, "dataSync ön plan hizmet türü için zaman sınırı zaten aşıldı" gibi bir hata mesajıyla ForegroundServiceStartNotAllowedException oluşturur.

Test

Uygulamanızın davranışını test etmek için, Android 15'i hedeflemese bile (uygulama Android 15 cihazda çalışıyorsa) 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 ayarlayabilirsiniz. dataSync ön plan hizmeti için yeni bir zaman aşımı süresi ayarlamak isterseniz 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