Android Doze Modu: Background İşleri Kontrol Etme Rehberi

Android 6.0'dan itibaren Google, pil tasarrufu için Doze modunu ekledi. Cihaz hareketsiz ve şarj cihazına takılı değilse, sistem background uygulamaları uyutarak pili korur. Ama bu da uygulamanızın push bildirimleri, senkronizasyon ve diğer görevleri geciktirebilir.

Doze modu üç seviyede çalışır:
- Light Doze: Hafif kısıtlamalar, uygulamalar sınırlı ağ erişimi alır
- Deep Doze: Ağır kısıtlamalar, arka plan işleri neredeyse durdurulur
- Full Doze: Tam durum, sadece kritik görevler çalışır

Uygulamanız background'da veri senkronize etmek, konumlandırma yapmak veya bildiri göndermek istiyorsa Doze modu bunu engelleyebilir. İşleri zamanında çalıştırmak için sistem izinleri ve doğru API'ler gerekir.

Google'ın önerdiği yöntem WorkManager'dır. Bu kütüphane Doze modunu ve pil tasarrufunu dikkate alarak işleri planlar.

1// build.gradle
2dependencies {
3implementation "androidx.work:work-runtime-ktx:2.8.1"
4}

Senkronizasyon işi tanımlayın:

1class SyncWorker(context: Context, params: WorkerParameters): Worker(context, params) {
2override fun doWork(): Result {
3return try {
4// Veri senkronize et
5syncDataFromServer()
6Result.success()
7} catch (e: Exception) {
8Result.retry()
9}
10}
11
12private fun syncDataFromServer() {
13// API çağrısı veya veritabanı işlemi
14println("Veri senkronize edildi")
15}
16}

İşi planlayın:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1val syncWork = PeriodicWorkRequestBuilder<SyncWorker>(
215, TimeUnit.MINUTES
3).build()
4
5WorkManager.getInstance(context).enqueueUniquePeriodicWork(
6"data_sync",
7ExistingPeriodicWorkPolicy.KEEP,
8syncWork
9)

Çıktı: WorkManager, Doze modunda bile her 15 dakikada bir işi çalıştırmaya çalışır. Sistem pil durumuna göre zamanlamayı ayarlar.

Eğer uygulamanız kritik bir hizmet sunuyorsa (örneğin sağlık uygulaması), Doze'den muafiyet talep edebilirsiniz:

1<!-- AndroidManifest.xml -->
2<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

Kod içinde:

1val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
2intent.data = Uri.parse("package:${context.packageName}")
3startActivity(intent)

Bu, kullanıcıdan uygulamanızı pil optimizasyonundan çıkarmasını ister.

Doze modundan kaçmak yerine WorkManager ile uyum sağlayın. İşleri periyodik olarak planlayın, sistem pili korurken görevleriniz çalışacak. Kritik uygulamalar için whitelist talep edebilirsiniz.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz