WakeLock: bu nədir, yuxu blokadasının növləri və idarə edilməsi

Müəllif: IT Sectr Dərc olunub: 2026-03-28 Oxuma vaxtı: 9 dəq

WakeLock, Android-in cihazı yuxu rejiminə keçirməsinin qarşısını alan, prosessoru və ya ekranı aktiv vəziyyətdə saxlayan bir mexanizmdir. Faylları endirmə, audio oxutma və ya məlumatların yazılması kimi fon tapşırıqları, fasiləsiz icra üçün WakeLock tələb edir. Android Developers, 2025 spesifikasiyasına görə, WakeLock-un səhv istifadəsi batareyanın sürətlə boşalmasına gətirib çıxarır və Google Play-də tətbiqin bloklanmasına səbəb ola bilər.

Əsas məqamlar

  • WakeLock — cihazı aktiv vəziyyətdə saxlayan yuxu blokadası
  • Növlər — PARTIAL_WAKE_LOCK, FULL_WAKE_LOCK, SCREEN_DIM_WAKE_LOCK və digərləri
  • İcazə — WAKE_LOCK manifestdə tələb olunur, lakin runtime-da tələb edilmir
  • Riskler — bağlanmamış WakeLock batareyanı boşaldır və istifadəçi təcrübəsini pisləşdirir
  • Alternativlər — WorkManager, Foreground Service, JobScheduler WakeLock-a ehtiyacı azaldır

WakeLock nədir

WakeLock, Android-in cihazı aşağı enerji sərfiyyatı rejiminə keçirməsini qadağan edən sistem blokadasıdır. Adətən Android istifadəçinin bir neçə saniyə hərəkətsizliyindən sonra ekranı söndürür və prosessoru dərin yuxu (deep sleep) vəziyyətinə keçirir, bu zaman fon axınları dayandırılır. WakeLock bu keçidin qarşısını alır, CPU-nu aktiv vəziyyətdə saxlayır.

WakeLock mexanizmi PowerManager sistem xidməti vasitəsilə idarə olunur, ona getSystemService(Context.POWER_SERVICE) metodu ilə giriş əldə edilir. Tərtibatçı blokada növünü göstərərək WakeLock obyekti yaradır və tapşırıq tamamlandıqdan sonra onu buraxmalıdır, əks halda cihazın batareyası sürətlə boşalacaq. Sistem WakeLock-u avtomatik buraxmır — bu tətbiqin məsuliyyətidir.

Android-in hər əsas versiyası ilə Google WakeLock üzərində nəzarəti gücləndirir. Android 9 (API 28)-dan başlayaraq, fondakı tətbiq ciddi səbəb olmadan WakeLock əldə edə bilməz və sistem blokadalardan sui-istifadə edən tətbiqləri izləyərək məcburi şəkildə onları buraxa bilər. Android 12+-də fon tətbiqləri üçün PowerManager-ə girişə əlavə məhdudiyyətlər tətbiq edilmişdir.

WakeLock nə vaxt lazımdır

WakeLock, tapşırığın cihazın yuxu rejiminə keçməsi ilə kəsilə bilməyəcəyi ssenarilərdə tələb olunur: qeyri-sabit bağlantı ilə böyük fayl endirmə, video yazma, istifadəçi iştirakı olmadan uzunmüddətli hesablamalar aparma. Yuxu blokadası olmadan prosessor dərin yuxuya keçir, bütün axınlar (threads) dondurulur və tapşırıq yarımçıq qalır.

Bununla belə, Google WakeLock istifadəsini minimuma endirməyi tövsiyə edir. Əksər hallarda eyni tapşırığı Foreground Service bildirişlə, WorkManager və ya JobScheduler ilə həll etmək olar. Bu mexanizmlər batareya və şəbəkə vəziyyətini nəzərə alır ki, bu da cihazın batareya ilə işləmə müddətini uzadır.

WakeLock necə işləyir

WakeLock, cihazın enerji təchizatı vəziyyətini idarə edən PowerManager sistem xidməti vasitəsilə işləyir. Tətbiq powerManager.newWakeLock() vasitəsilə blokada tələb etdikdə, sistem CPU aktivlik səviyyəsini artırır, dərin yuxuya keçidin qarşısını alır. wakeLock.release() çağırıldıqdan sonra sistem normal enerji qənaəti rejiminə qayıdır.

WakeLock-un bütün enerji qənaət rejimlərinin qarşısını almadığını başa düşmək vacibdir. Doze Mode (Android 6+ yuxu rejimi) müəyyən fazalarda WakeLock-a məhəl qoymaya bilər — saxlanılan WakeLock olan tətbiq Doze xidmət pəncərələrində şəbəkəyə çıxış əldə etməyəcək. Bu o deməkdir ki, hətta aktiv WakeLock belə Doze-nin ikinci fazası zamanı şəbəkə əməliyyatlarının icrasına zəmanət vermir.

Hər WakeLock framework tərəfində PowerManager.WakeLock ilə əlaqələndirilir. Sistem proses səviyyəsində aktiv blokadaların sayını aparır: bir proses bir neçə WakeLock saxlayırsa, onlar toplanır və buraxılma yalnız hər blokada üçün release() çağırıldıqdan sonra baş verir. Android həmçinin wake lock timeouts-u dəstəkləyir — müəyyən intervaldan sonra avtomatik buraxılma. Bununla belə, timeout-a etibar etmək tövsiyə edilmir: tapşırıq daha tez bitə bilər və əlavə saxlama müddəti batareya resursunu azaldacaq.

WakeLock və sistem hadisələri

Cihaz yuxu rejiminə keçdikdə (güc düyməsi), Android bütün SCREEN_DIM_WAKE_LOCKSCREEN_BRIGHT_WAKE_LOCK-u məcburi buraxır, lakin PARTIAL_WAKE_LOCK-u saxlayır. Bu o deməkdir ki, ekran blokadası cihazı ekranı söndürməkdən saxlaya bilməz — yalnız PARTIAL_WAKE_LOCK güc düyməsi basıldıqdan sonra işə davam edə bilər.

Android-də WakeLock növləri

Android-də bir neçə WakeLock növü mövcuddur, hər biri cihazın konkret komponentlərini idarə edir. Növün seçimi blokadadan sonra hansı aparat komponentlərinin aktiv qalacağını müəyyən edir. Səhv növ seçimi lazımsız modulların işə salınması səbəbindən həddindən artıq enerji sərfiyyatına gətirib çıxarır.

NövCPUEkranKlaviaturaNə vaxt istifadə etməli
PARTIAL_WAKE_LOCKYanırSönürSönürFayl endirmə, hesablamalar
SCREEN_DIM_WAKE_LOCKYanırSolğunSönürVideo pleyer, təqdimat
SCREEN_BRIGHT_WAKE_LOCKYanırParlaqSönürOyunlar (köhnəlmiş)
FULL_WAKE_LOCKYanırParlaqParlaqKöhnəlmiş (deprecated)

PARTIAL_WAKE_LOCK — əsas növ

PARTIAL_WAKE_LOCK ən çox istifadə olunan və tövsiyə edilən növdür. CPU-nu aktiv vəziyyətdə saxlayır, lakin ekranın və klaviatura işıqlandırmasının sönməsinə imkan verir. Bu fon tapşırıqları üçün optimal seçimdir: məlumat endirmə, şəkil emalı, sinxronizasiya. Ekran sistem vaxt aşımından sonra sönür ki, bu da istifadəçiyə görünməyən işin yerinə yetirilməsi zamanı batareyaya qənaət edir.

Köhnəlmiş növlər (deprecated)

SCREEN_DIM_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCKFULL_WAKE_LOCK Android 7-dən (API 24) etibarən köhnəlmiş kimi qeyd olunub. Onlar ekranı yandıq saxlayır ki, bu da əhəmiyyətli batareya sərfiyyatına gətirib çıxarır. Google onların əvəzinə FLAG_KEEP_SCREEN_ON istifadə etməyi tövsiyə edir — bu flag yalnız aktiv Activity zamanı işləyir və WAKE_LOCK icazəsi tələb etmir, sistem isə ekranın saxlanma müddətini avtomatik idarə edir.

WakeLock və enerji sərfiyyatı

WakeLock Android-də batareyanın əsas „yeyicilərindən" biridir. Yuxu blokadasının saxlanılan hər saniyəsi əlavə enerji sərf edir, çünki prosessor enerjiyə qənaət edən C-state vəziyyətinə keçə bilmir. Google Power Dashboard tədqiqatı göstərir ki, səhv buraxılmış WakeLock-ları olan tətbiqlər cihazın enerji sərfiyyatını gözləmə rejimində 30–50% artıra bilər.

Sistem WakeLock-dan sui-istifadə edən tətbiqləri Battery Historian komponenti vasitəsilə izləyir. Tərtibatçı enerji sərfiyyatı profilini təhlil edə və blokada „sızmalarını" — WakeLock-un yaradıldığı, lakin buraxılmadığı vəziyyətləri aşkar edə bilər. Google Play Console dərc edilmiş tətbiqlər üçün WakeLock statistikasını göstərir və uzun saxlama müddəti pis rəylərə səbəb ola bilər.

Doze ModeApp Standby əlavə olaraq WakeLock işini məhdudlaşdırır. Doze-nin birinci fazasında (Light Doze) sistem qısa xidmət pəncərələrində WakeLock-a icazə verir. İkinci fazada (Deep Doze) WakeLock digər blokadalarla birləşdirilir və ümumi pəncərədə icra olunur. Tətbiq istifadəçi qarşılıqlı əlaqəsi olmadan 10 dəqiqədən çox WakeLock saxlayırsa, sistem onu məcburi buraxa və tətbiqi batareya optimallaşdırmasının qara siyahısına sala bilər.

  • Battery Historian — enerji sərfiyyatı və WakeLock sızmalarını təhlil etmək üçün alət
  • Doze Mode — blokadaları birləşdirərək xidmət pəncərələrində WakeLock-u məhdudlaşdırır
  • Google Play Console — dərc edilmiş tətbiqlər üçün WakeLock statistikasını göstərir
  • Qara siyahı — tətbiq sistem tərəfindən enerji tutumu kimi qeyd oluna bilər

İstifadə üçün ən yaxşı təcrübələr

WakeLock-un düzgün istifadəsi tapşırığı yerinə yetirmək zərurəti ilə cihazın batareyasına qayğı arasında tarazlıqdır. Google bir neçə prinsipə riayət etməyi tövsiyə edir: həmişə WakeLock-u finally-də və ya acquire(timeout) vasitəsilə buraxın, minimum zəruri blokada növündən istifadə edin və zəruri olmadan uzun müddət saxlamaqdan çəkinin.

Buraxma qaydası

WakeLock yaradıldığı eyni kod blokunda buraxılmalıdır. İstisnalar zamanı buraxılmanı təmin etmək üçün try-finally konstruksiyası və ya Kotlin-in use bloku istifadə olunur. Android 10+-da sistem WakeLock 60 saniyədən çox saxlanıldıqda logcat-da xəbərdarlıq göstərir: "WakeLock held for more than 60 seconds" — bu mümkün sızma siqnalıdır.

Timeout ilə əldə etmə

acquire(long timeout) metodu WakeLock-u müəyyən edilmiş millisaniyə müddətindən sonra avtomatik buraxır. Bu, buraxma kodunun istisna və ya xəta səbəbindən icra olunmaması halında sığortadır. Tapşırığın maksimum gözlənilən icra müddətinə üstəgəl 10–20% ehtiyat əlavə edərək həmişə timeout göstərmək tövsiyə olunur.

Blokadanın mövcudluğunun yoxlanılması

release() çağırmazdan əvvəl WakeLock-un hazırda saxlanılıb-saxlanılmadığını yoxlamaq lazımdır. Əvvəlcədən acquire() olmadan təkrar release() çağırışı RuntimeException: WakeLock under-locked yaradır. Vəziyyət flagını (isHeld) saxlamaq və buraxmazdan əvvəl wakeLock.isHeld() yoxlamaq tövsiyə olunur.

Kotlin-də WakeLock istifadəsi

Kotlin-də WakeLock-un düzgün yaradılması və buraxılmasını nəzərdən keçirək. Nümunə PARTIAL_WAKE_LOCK saxlanılması ilə asinxron məlumat endirməni, try-finally blokunda zəmanətli buraxılmanı və sızmalardan qorunmaq üçün timeout göstərilməsini nümayiş etdirir. Xidmət fon tapşırığını icra etmək üçün IO dispetçeri ilə CoroutineScope istifadə edir.

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() {
        // Fayl endirmənin simulyasiyası
        delay(30000)
    }

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

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

Manifestdə icazənin bəyan edilməsi

WakeLock istifadə etmək üçün AndroidManifest.xml-də icazə əlavə etmək lazımdır. WAKE_LOCK icazəsi normal (normal) icazədir — istifadəçidən runtime sorğusu tələb etmir və tətbiq quraşdırılarkən avtomatik verilir. Bununla belə, Google Play tətbiqdə WakeLock istifadəsinin aşkar ssenarisi yoxdursa, dərci rədd edə bilər.

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

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

WakeLock alternativləri

WakeLock aşağı səviyyəli mexanizmdir və Google mümkün olduqda onu daha müasir API-lərlə əvəz etməyi tövsiyə edir. Əsas alternativ bildirişli Foreground Service-dir, o, xidmətin işlədiyi müddətdə avtomatik CPU blokadasını saxlayır. Sistem Foreground Service üçün WakeLock-u özü idarə edir, tərtibatçını açıq şəkildə əldə etmə və buraxma zərurətindən azad edir.

WorkManager fon tapşırıqları üçün ikinci ən vacib alətdir. O, cihaz Doze rejiminə keçsə belə və yenidən başladıldıqdan sonra işin icrasına zəmanət verir. WorkManager daxilində blokada saxlama (hold lock) dəstəkləyir — tərtibatçı PowerManager ilə açıq işləməli deyil. Tapşırıq yuxu blokadasının avtomatik idarə edilməsi ilə Doze xidmət pəncərəsində icra olunur.

Dəqiq vaxt tələb edən müntəzəm tapşırıqlar üçün setAndAllowWhileIdle() ilə AlarmManager istifadə olunur, o, cihazı Doze-dən oyada bilər. Lakin AlarmManager yalnız qısa əməliyyatlar üçün uyğundur — uzunmüddətli WakeLock saxlamaq üçün nəzərdə tutulmayıb. Tapşırıq 10 saniyədən çox çəkirsə, AlarmManager-ı Foreground Service işə salan BroadcastReceiver ilə birləşdirmək lazımdır.

  • Foreground Service — bildirişlə WakeLock-un avtomatik idarə edilməsi
  • WorkManager — Doze və yenidən başlatma nəzərə alınmaqla zəmanətli icra
  • JobScheduler — şəbəkə, doldurma və boş vaxt nəzərə alınmaqla planlaşdırma
  • AlarmManager — qısa tapşırıqlar üçün cihazı oyatma

Tez-tez verilən suallar

Android-də WakeLock nədir?

WakeLock, Android cihazının yuxu rejiminə keçməsinin qarşısını alan sistem blokadasıdır. Prosessoru və ya ekranı aktiv vəziyyətdə saxlayır, fon tapşırıqlarının (endirmə, hesablamalar) fasiləsiz icrasına imkan verir. PowerManager sistem xidməti vasitəsilə idarə olunur.

Hansı WakeLock növləri mövcuddur?

Əsas növlər: PARTIAL_WAKE_LOCK (CPU aktiv, ekran sönük) — tövsiyə olunur; SCREEN_DIM_WAKE_LOCK (CPU + solğun ekran); SCREEN_BRIGHT_WAKE_LOCK (CPU + parlaq ekran). SCREEN_DIM, SCREEN_BRIGHT və FULL_WAKE_LOCK köhnəlmiş kimi qeyd olunub və FLAG_KEEP_SCREEN_ON ilə əvəz edilib.

WakeLock üçün icazə lazımdırmı?

Bəli, manifestdə android.permission.WAKE_LOCK bəyan edilməlidir. Bu normal icazədir (normal permission) və quraşdırma zamanı avtomatik verilir — runtime-da tələb etmək lazım deyil. Bu icazə olmadan newWakeLock() çağırışı null qaytaracaq və ya SecurityException atacaq.

WakeLock buraxılmasa nə olar?

release() çağırılmasa, cihaz yuxu rejiminə keçə bilməyəcək. Batareya əhəmiyyətli dərəcədə sürətlə boşalacaq (50% əlavə sərfiyyata qədər). Sistem logcat-da sızma qeyd edəcək, Battery Historian isə anormal WakeLock saxlama müddəti göstərəcək ki, bu da istifadəçilərin pis rəylərinə səbəb olacaq.

Müasir tətbiqlərdə WakeLock-u nə ilə əvəz etmək olar?

Uzunmüddətli tapşırıqlar üçün bildirişli Foreground Service istifadə edin — sistem WakeLock-u özü idarə edir. Təxirə salınmış və zəmanətli tapşırıqlar üçün daxili WakeLock dəstəyi olan WorkManager istifadə edin. Qısa cədvəl tapşırıqları üçün — AlarmManager.

Nəticə

  • WakeLock — Android cihazının CPU və ya ekranını aktiv vəziyyətdə saxlayan yuxu blokadası
  • PARTIAL_WAKE_LOCK — fon tapşırıqları üçün əsas növ; ekran sönür, CPU aktiv qalır
  • İcazə — manifestdə WAKE_LOCK (normal permission, runtime tələb olunmur)
  • Sızmalar — bağlanmamış WakeLock batareyanı 30–50% boşaldır; finally və ya timeout ilə buraxın
  • Deprecated — SCREEN_DIM, SCREEN_BRIGHT və FULL_WAKE_LOCK FLAG_KEEP_SCREEN_ON ilə əvəz edilib
  • Foreground Service — bildirişlə WakeLock-un avtomatik idarə edilməsi ilə alternativ
  • WorkManager — zəmanətli icra ilə təxirə salınmış fon tapşırıqları üçün ən yaxşı seçim

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun