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.gradle2dependencies {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 et5syncDataFromServer()6Result.success()7} catch (e: Exception) {8Result.retry()9}10}1112private fun syncDataFromServer() {13// API çağrısı veya veritabanı işlemi14println("Veri senkronize edildi")15}16}İşi planlayın:
1val syncWork = PeriodicWorkRequestBuilder<SyncWorker>(215, TimeUnit.MINUTES3).build()45WorkManager.getInstance(context).enqueueUniquePeriodicWork(6"data_sync",7ExistingPeriodicWorkPolicy.KEEP,8syncWork9)Çı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.
0 yorum