WakeLock: nedir, türleri ve uyku kilidi yönetimi

Yazar: IT Sectr Yayınlanma: 2026-03-28 Okuma süresi: 9 dk

WakeLock, CPU’yu veya ekranı aktif tutarak cihazın uyku moduna geçmesini önleyen bir Android mekanizmasıdır. Dosya indirme, ses çalma veya veri kaydı gibi arka plan görevleri, kesintisiz çalışma garantisi için WakeLock gerektirir. Android Developers, 2025 spesifikasyonuna göre, WakeLock’un yanlış kullanımı pilin hızla tükenmesine yol açar ve uygulamanın Google Play’de engellenmesine neden olabilir.

Anahtar Noktalar

  • WakeLock — cihazı aktif tutan bir uyku kilidi
  • Türler — PARTIAL_WAKE_LOCK, FULL_WAKE_LOCK, SCREEN_DIM_WAKE_LOCK ve diğerleri
  • İzin — manifestoda WAKE_LOCK gerekli ancak çalışma zamanında istenmez
  • Riskler — serbest bırakılmayan WakeLock pili tüketir ve kullanıcı deneyimini bozar
  • Alternatifler — WorkManager, Foreground Service, JobScheduler WakeLock ihtiyacını azaltır

WakeLock nedir

WakeLock, Android’in cihazı düşük güç moduna almasını önleyen bir sistem kilididir. Normalde, kullanıcının birkaç saniye hareketsiz kalmasından sonra Android ekranı kapatır ve CPU’yu derin uyku (deep sleep) durumuna geçirerek arka plan iş parçacıklarını askıya alır. WakeLock, CPU’yu aktif tutarak bu geçişi önler.

WakeLock mekanizması, sistem hizmeti PowerManager aracılığıyla yönetilir ve getSystemService(Context.POWER_SERVICE) yöntemiyle erişilir. Geliştirici, kilit türünü belirterek bir WakeLock nesnesi oluşturur ve görev tamamlandıktan sonra onu garanti altına alarak serbest bırakmalıdır, aksi takdirde cihazın pili hızla tükenecektir. Sistem WakeLock’u otomatik olarak serbest bırakmaz — bu uygulamanın sorumluluğudur.

Her büyük Android sürümüyle birlikte Google, WakeLock üzerindeki kontrolü sıkılaştırır. Android 9 (API 28)’dan başlayarak, arka plandaki bir uygulama geçerli bir sebep olmadan WakeLock alamaz ve sistem kilitleri kötüye kullanan uygulamaları izler ve zorla serbest bırakabilir. Android 12+’da arka plan uygulamaları için PowerManager erişimine ek kısıtlamalar getirildi.

WakeLock ne zaman gereklidir

WakeLock, cihazın uyku moduna geçmesiyle kesintiye uğramaması gereken senaryolarda gereklidir: dengesiz bir bağlantı üzerinden büyük dosya indirme, video kaydı, kullanıcı etkileşimi olmadan uzun hesaplamalar yapma. Uyku kilidi olmadan CPU derin uykuya girer, tüm iş parçacıkları donar ve görev tamamlanmamış kalır.

Ancak Google, WakeLock kullanımını en aza indirmeyi şiddetle önerir. Çoğu durumda, aynı görev bildirimli Foreground Service, WorkManager veya JobScheduler ile çözülebilir. Bu mekanizmalar pil ve ağ durumunu dikkate alarak cihazın pil ömrünü uzatır.

WakeLock nasıl çalışır

WakeLock, cihazın güç durumunu yöneten PowerManager sistem hizmeti aracılığıyla çalışır. Bir uygulama powerManager.newWakeLock() ile bir kilit talep ettiğinde, sistem CPU etkinlik seviyesini yükselterek derin uykuyu önler. wakeLock.release() çağrıldıktan sonra sistem normal güç tasarrufu moduna döner.

WakeLock’un tüm güç tasarrufu modlarını engellemediğini anlamak önemlidir. Doze Modu (Android 6+’nın uyku modu) belirli aşamalarda WakeLock’u görmezden gelebilir — WakeLock tutan bir uygulama, Doze bakım pencereleri sırasında ağ erişimi alamaz. Bu, aktif bir WakeLock’un bile Doze’un ikinci aşamasında ağ işlemlerini garanti etmediği anlamına gelir.

Her WakeLock, framework tarafında bir PowerManager.WakeLock ile ilişkilidir. Sistem, işlem düzeyinde aktif kilitleri sayar: bir işlem birden fazla WakeLock tutarsa, birikirler ve serbest bırakma yalnızca her kilit için release() çağrıldıktan sonra gerçekleşir. Android ayrıca uyandırma kilidi zaman aşımlarını da destekler — belirtilen aralıktan sonra otomatik serbest bırakma. Ancak, zaman aşımına güvenilmesi önerilmez: görev daha erken tamamlanabilir ve ekstra tutma süresi pil ömrünü kısaltır.

WakeLock ve sistem olayları

Cihaz uyku moduna geçtiğinde (güç düğmesi), Android tüm SCREEN_DIM_WAKE_LOCK ve SCREEN_BRIGHT_WAKE_LOCK’ları zorla serbest bırakır ancak PARTIAL_WAKE_LOCK’u korur. Bu, bir ekran kilidinin ekranı açık tutamayacağı anlamına gelir — yalnızca PARTIAL_WAKE_LOCK güç düğmesine basıldıktan sonra çalışmaya devam edebilir.

Android’de WakeLock türleri

Android’de her biri belirli cihaz bileşenlerini kontrol eden birkaç WakeLock türü vardır. Tür seçimi, kilitlemeden sonra hangi donanım bileşenlerinin aktif kalacağını belirler. Yanlış tür seçimi, gereksiz modüllerin açık kalması nedeniyle aşırı güç tüketimine yol açar.

TürCPUEkranKlavyeNe zaman kullanılır
PARTIAL_WAKE_LOCKAçıkKapalıKapalıDosya indirme, hesaplamalar
SCREEN_DIM_WAKE_LOCKAçıkLoşKapalıVideo oynatıcı, sunum
SCREEN_BRIGHT_WAKE_LOCKAçıkParlakKapalıOyunlar (kullanımdan kaldırıldı)
FULL_WAKE_LOCKAçıkParlakParlakKullanımdan kaldırıldı (deprecated)

PARTIAL_WAKE_LOCK — ana tür

PARTIAL_WAKE_LOCK en çok kullanılan ve önerilen türdür. CPU’yu aktif tutar ancak ekranın ve klavye arka aydınlatmasının kapanmasına izin verir. Bu, arka plan görevleri için en uygun seçimdir: veri yükleme, görüntü işleme, senkronizasyon. Ekran, sistem zaman aşımından sonra kapanarak kullanıcı için görünmeyen işler yapılırken pil tasarrufu sağlar.

Kullanımdan kaldırılan türler (deprecated)

SCREEN_DIM_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK ve FULL_WAKE_LOCK, Android 7 (API 24)’den beri kullanımdan kaldırılmıştır. Ekranı açık tutarak önemli pil tüketimine neden olurlar. Google bunun yerine Activity.getWindow().addFlags() aracılığıyla FLAG_KEEP_SCREEN_ON kullanılmasını önerir — bu bayrak yalnızca Activity aktif olduğunda çalışır ve WAKE_LOCK izni gerektirmez, sistem ekran tutma süresini otomatik olarak yönetir.

WakeLock ve güç tüketimi

WakeLock, Android’deki ana pil tüketim kaynaklarından biridir. Uyku kilidinin tutulduğu her saniye, CPU enerji verimli C durumuna geçemediği için ekstra güç tüketir. Google Power Dashboard araştırması, WakeLock’ları yanlış serbest bırakılan uygulamaların bekleme modunda cihazın güç tüketimini %30–50 oranında artırabileceğini göstermektedir.

Sistem, Battery Historian bileşeni aracılığıyla WakeLock’u kötüye kullanan uygulamaları izler. Geliştirici, güç tüketimi profilini analiz edebilir ve kilit sızıntılarını (WakeLock’un oluşturulduğu ancak serbest bırakılmadığı durumlar) belirleyebilir. Google Play Console, yayınlanan uygulamalar için WakeLock istatistiklerini gösterir ve yüksek tutma süresi kötü değerlendirmelere yol açabilir.

Doze Modu ve App Standby, WakeLock çalışmasını daha da kısıtlar. İlk Doze aşamasında (Light Doze), sistem kısa bakım pencerelerinde WakeLock’a izin verir. İkinci aşamada (Deep Doze), WakeLock diğer kilitlerle birleştirilir ve ortak bir pencerede yürütülür. Bir uygulama, kullanıcı etkileşimi olmadan 10 dakikadan fazla WakeLock tutarsa, sistem onu zorla serbest bırakabilir ve uygulamayı pil optimizasyonu kara listesine ekleyebilir.

  • Battery Historian — güç tüketimi ve WakeLock sızıntılarını analiz etme aracı
  • Doze Modu — bakım pencerelerinde WakeLock’u kısıtlar, kilitleri birleştirir
  • Google Play Console — yayınlanan uygulamalar için WakeLock istatistiklerini gösterir
  • Kara liste — uygulama sistem tarafından güç tüketici olarak işaretlenebilir

Kullanım için en iyi uygulamalar

WakeLock’un doğru kullanımı, bir görevi tamamlama ihtiyacı ile cihazın piline özen gösterme arasındaki dengedir. Google birkaç ilkeyi izlemeyi önerir: WakeLock’u her zaman bir finally bloğunda veya acquire(timeout) aracılığıyla serbest bırakın, minimum gerekli kilit türünü kullanın ve zorunlu olmadıkça uzun süreli tutmaktan kaçının.

Serbest bırakma kuralı

WakeLock, oluşturulduğu aynı kod bloğunda serbest bırakılmalıdır. İstisnalar durumunda serbest bırakmayı garanti etmek için try-finally yapısı veya Kotlin’in use bloğu kullanılır. Android 10+’da, bir WakeLock 60 saniyeden fazla tutulursa sistem logcat’te bir uyarı gösterir: "WakeLock held for more than 60 seconds" — bu olası bir sızıntıyı işaret eder.

Edinme zaman aşımı

acquire(long timeout) yöntemi, belirtilen milisaniye süresinden sonra WakeLock’u otomatik olarak serbest bırakır. Bu, bir istisna veya hata nedeniyle serbest bırakma kodunun çalışmaması durumunda bir güvencedir. Her zaman maksimum beklenen görev yürütme süresine %10–20 marj eklenerek bir zaman aşımı belirtilmesi önerilir.

Kilit durumunu kontrol etme

release() çağırmadan önce, WakeLock’un şu anda tutulup tutulmadığı kontrol edilmelidir. Önceden acquire() olmadan tekrar release() çağırmak RuntimeException: WakeLock under-locked hatasına neden olur. Bir durum bayrağı (isHeld) saklanması ve serbest bırakmadan önce wakeLock.isHeld()’in kontrol edilmesi önerilir.

Kotlin’de WakeLock kullanımı

Kotlin’de WakeLock’un doğru oluşturulmasını ve serbest bırakılmasını inceleyelim. Örnek, PARTIAL_WAKE_LOCK tutarak eşzamansız veri yüklemeyi, try-finally bloğunda garantili serbest bırakmayı ve sızıntılara karşı koruma için belirtilen zaman aşımını gösterir. Hizmet, arka plan görevi yürütme için IO dağıtıcısıyla birlikte CoroutineScope kullanır.

kotlin
class DownloadService : Service() {

    private lateinit var wakeLock: PowerManager.WakeLock
    private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())

    override fun onCreate() {
        super.onCreate()
        val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
        wakeLock = powerManager.newWakeLock(
            PowerManager.PARTIAL_WAKE_LOCK,
            "download:wakelock"
        )
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        wakeLock.acquire(60000)
        scope.launch {
            try {
                downloadFile()
            } finally {
                if (wakeLock.isHeld()) {
                    wakeLock.release()
                }
            }
        }
        return START_NOT_STICKY
    }

    private suspend fun downloadFile() {
        // Dosya indirme simülasyonu
        delay(30000)
    }

    override fun onDestroy() {
        super.onDestroy()
        scope.cancel()
        if (wakeLock.isHeld()) {
            wakeLock.release()
        }
    }

    override fun onBind(intent: Intent): IBinder? = null
}

Manifestoda izin bildirimi

WakeLock kullanmak için AndroidManifest.xml’e izin eklenmelidir. WAKE_LOCK izni normal bir izindir — kullanıcıdan çalışma zamanı talebi gerektirmez ve uygulama kurulduğunda otomatik olarak verilir. Ancak, uygulamanın WakeLock için belirgin bir kullanım durumu yoksa Google Play yayınlamayı reddedebilir.

xml
<uses-permission
    android:name="android.permission.WAKE_LOCK" />

<uses-permission
    android:name="android.permission.DEVICE_POWER" />

WakeLock’a alternatifler

WakeLock düşük seviyeli bir mekanizmadır ve Google mümkün olduğunda daha modern API’lerle değiştirilmesini önerir. Ana alternatif, hizmetin süresi boyunca otomatik olarak CPU kilidini tutan bildirimli Foreground Service’dir. Sistem, Foreground Service için WakeLock’u kendisi yönetir ve geliştiriciyi açık alma ve serbest bırakma işleminden kurtarır.

WorkManager, arka plan görevleri için ikinci en önemli araçtır. Cihaz Doze moduna girdikten sonra ve yeniden başlatmanın ardından bile görev yürütmesini garanti eder. WorkManager dahili olarak bir tutma kilidi (hold lock) destekler — geliştiricinin PowerManager ile açıkça çalışması gerekmez. Görev, otomatik uyku kilidi yönetimiyle Doze bakım penceresinde yürütülür.

Kesin zamanlama gerektiren yinelenen görevler için, cihazı Doze’dan uyandırabilen setAndAllowWhileIdle() ile birlikte AlarmManager kullanılır. Ancak AlarmManager yalnızca kısa işlemler için uygundur — uzun süreli WakeLock tutma için tasarlanmamıştır. Bir görev 10 saniyeden uzun sürüyorsa, AlarmManager’ı bir Foreground Service başlatan BroadcastReceiver ile birleştirin.

  • Foreground Service — bildirimle otomatik WakeLock yönetimi
  • WorkManager — Doze ve yeniden başlatma desteğiyle garantili yürütme
  • JobScheduler — ağ, şarj ve boşta duruma göre zamanlama
  • AlarmManager — kısa zamanlanmış görevler için cihazı uyandırma

Sıkça sorulan sorular

Android’de WakeLock nedir

WakeLock, bir Android cihazın uyku moduna geçmesini önleyen bir sistem kilididir. CPU’yu veya ekranı aktif tutarak arka plan görevlerinin (indirme, hesaplama) kesintisiz çalışmasını sağlar. PowerManager sistem hizmeti aracılığıyla yönetilir.

Hangi WakeLock türleri vardır

Ana türler şunlardır: PARTIAL_WAKE_LOCK (CPU aktif, ekran kapalı) — önerilir; SCREEN_DIM_WAKE_LOCK (CPU + loş ekran); SCREEN_BRIGHT_WAKE_LOCK (CPU + parlak ekran). SCREEN_DIM, SCREEN_BRIGHT ve FULL_WAKE_LOCK kullanımdan kaldırıldı ve FLAG_KEEP_SCREEN_ON ile değiştirildi.

WakeLock için izin gerekli mi

Evet, manifestoda android.permission.WAKE_LOCK bildirilmelidir. Bu normal bir izindir, kurulumda otomatik olarak verilir — çalışma zamanında talep edilmesi gerekmez. Bu izin olmadan newWakeLock() çağrısı null döndürür veya SecurityException fırlatır.

Bir WakeLock’u serbest bırakmazsam ne olur

release() çağrılmazsa, cihaz uyku moduna geçemez. Pil önemli ölçüde daha hızlı tükenir (%50’ye kadar ek tüketim). Sistem logcat’te sızıntıyı kaydeder ve Battery Historian anormal WakeLock tutma süresi gösterir, bu da kötü kullanıcı değerlendirmelerine yol açar.

Modern uygulamalarda WakeLock’un yerini ne alabilir

Uzun görevler için bildirimli Foreground Service kullanın — sistem WakeLock’u kendisi yönetir. Ertelenmiş ve garantili görevler için dahili olarak WakeLock destekleyen WorkManager’ı kullanın. Kısa zamanlanmış görevler için AlarmManager’ı kullanın.

Özet

  • WakeLock — Android cihazın CPU’sunu veya ekranını aktif tutan bir uyku kilidi
  • PARTIAL_WAKE_LOCK — arka plan görevleri için ana tür; ekran kapalı, CPU aktif kalır
  • İzin — manifestoda WAKE_LOCK (normal izin, çalışma zamanı gerekmez)
  • Sızıntılar — serbest bırakılmayan WakeLock pili %30–50 tüketir; finally veya zaman aşımında serbest bırakın
  • Kullanımdan kaldırıldı — SCREEN_DIM, SCREEN_BRIGHT ve FULL_WAKE_LOCK, FLAG_KEEP_SCREEN_ON ile değiştirildi
  • Foreground Service — otomatik WakeLock yönetimi ve bildirimli alternatif
  • WorkManager — garantili yürütmeyle ertelenmiş arka plan görevleri için en iyi seçim

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun