WakeLock: यह क्या है, प्रकार और स्लीप लॉक प्रबंधन

लेखक: IT Sectr प्रकाशित: 2026-03-28 पढ़ने का समय: 9 मिनट

WakeLock एक Android तंत्र है जो CPU या स्क्रीन को सक्रिय रखकर डिवाइस को स्लीप मोड में जाने से रोकता है। फ़ाइल डाउनलोड, ऑडियो प्लेबैक या डेटा रिकॉर्डिंग जैसे बैकग्राउंड कार्यों को बिना रुकावट के निष्पादन सुनिश्चित करने के लिए WakeLock की आवश्यकता होती है। Android Developers, 2025 विनिर्देश के अनुसार, WakeLock का अनुचित उपयोग बैटरी को तेज़ी से खत्म करता है और Google Play पर ऐप के ब्लॉक होने का कारण बन सकता है।

मुख्य बातें

  • WakeLock — एक स्लीप लॉक जो डिवाइस को सक्रिय रखता है
  • प्रकार — PARTIAL_WAKE_LOCK, FULL_WAKE_LOCK, SCREEN_DIM_WAKE_LOCK और अन्य
  • अनुमति — मेनिफ़ेस्ट में WAKE_LOCK आवश्यक है लेकिन runtime में नहीं माँगी जाती
  • जोखिम — बिना रिलीज़ किया गया WakeLock बैटरी खत्म करता है और उपयोगकर्ता अनुभव को ख़राब करता है
  • विकल्प — WorkManager, Foreground Service, JobScheduler WakeLock की आवश्यकता कम करते हैं

WakeLock क्या है

WakeLock एक सिस्टम लॉक है जो Android को डिवाइस को कम बिजली मोड में डालने से रोकता है। सामान्यतः, उपयोगकर्ता की निष्क्रियता के कुछ सेकंड बाद, Android स्क्रीन बंद कर देता है और CPU को गहरी नींद (deep sleep) की स्थिति में डाल देता है, जिससे बैकग्राउंड थ्रेड निलंबित हो जाते हैं। WakeLock CPU को सक्रिय रखकर इस संक्रमण को रोकता है।

WakeLock तंत्र सिस्टम सेवा PowerManager के माध्यम से प्रबंधित किया जाता है, जिसे getSystemService(Context.POWER_SERVICE) विधि के माध्यम से एक्सेस किया जाता है। डेवलपर लॉक प्रकार निर्दिष्ट करते हुए एक WakeLock ऑब्जेक्ट बनाता है, और कार्य पूरा होने के बाद इसे गारंटी के साथ रिलीज़ करना होगा, अन्यथा डिवाइस की बैटरी तेज़ी से खत्म हो जाएगी। सिस्टम WakeLock को स्वचालित रूप से रिलीज़ नहीं करता — यह ऐप की जिम्मेदारी है।

प्रत्येक प्रमुख Android रिलीज़ के साथ, Google WakeLock पर नियंत्रण कड़ा करता है। Android 9 (API 28) से शुरू होकर, बैकग्राउंड में ऐप बिना वैध कारण के WakeLock प्राप्त नहीं कर सकता, और सिस्टम लॉक का दुरुपयोग करने वाले ऐप्स को ट्रैक करता है और जबरन उन्हें रिलीज़ कर सकता है। Android 12+ में बैकग्राउंड ऐप्स के लिए PowerManager एक्सेस पर अतिरिक्त प्रतिबंध लगाए गए।

WakeLock की आवश्यकता कब होती है

WakeLock उन परिदृश्यों में आवश्यक है जहाँ कार्य डिवाइस के स्लीप में जाने से बाधित नहीं हो सकता: अस्थिर कनेक्शन पर बड़ी फ़ाइल डाउनलोड करना, वीडियो रिकॉर्ड करना, उपयोगकर्ता के इंटरैक्शन के बिना लंबी गणना करना। स्लीप लॉक के बिना, CPU गहरी नींद में चला जाता है, सभी थ्रेड फ़्रीज़ हो जाते हैं, और कार्य अधूरा रह जाता है।

हालाँकि, Google WakeLock के उपयोग को कम करने की दृढ़ता से अनुशंसा करता है। अधिकांश मामलों में,उसी कार्य को Foreground Service नोटिफ़िकेशन, WorkManager या JobScheduler के साथ हल किया जा सकता है। ये तंत्र बैटरी और नेटवर्क स्थिति को ध्यान में रखते हैं, जिससे डिवाइस की बैटरी लाइफ बढ़ती है।

WakeLock कैसे काम करता है

WakeLock PowerManager सिस्टम सेवा के माध्यम से काम करता है, जो डिवाइस की बिजली स्थिति का प्रबंधन करती है। जब कोई ऐप powerManager.newWakeLock() के माध्यम से लॉक का अनुरोध करता है, तो सिस्टम CPU गतिविधि स्तर बढ़ाता है, गहरी नींद को रोकता है। wakeLock.release() कॉल करने के बाद, सिस्टम सामान्य बिजली बचत मोड पर लौट आता है।

यह समझना महत्वपूर्ण है कि WakeLock सभी बिजली बचत मोड को नहीं रोकता। Doze Mode (Android 6+ का स्लीप मोड) कुछ चरणों में WakeLock को अनदेखा कर सकता है — WakeLock रखने वाले ऐप को Doze रखरखाव विंडो के दौरान नेटवर्क एक्सेस नहीं मिलेगा। इसका मतलब है कि सक्रिय WakeLock भी Doze के दूसरे चरण के दौरान नेटवर्क संचालन की गारंटी नहीं देता।

प्रत्येक WakeLock फ्रेमवर्क पक्ष पर PowerManager.WakeLock से जुड़ा होता है। सिस्टम प्रक्रिया स्तर पर सक्रिय लॉक की गणना करता है: यदि एक प्रक्रिया कई WakeLock रखती है, तो वे जमा होते हैं, और रिलीज़ केवल प्रत्येक लॉक के लिए release() कॉल करने के बाद होती है। Android वेक लॉक टाइमआउट भी समर्थन करता है — निर्दिष्ट अंतराल के बाद स्वचालित रिलीज़। हालाँकि, टाइमआउट पर भरोसा करने की अनुशंसा नहीं की जाती: कार्य पहले पूरा हो सकता है, और अतिरिक्त होल्ड समय बैटरी जीवन कम करेगा।

WakeLock और सिस्टम घटनाएँ

जब डिवाइस स्लीप मोड में जाता है (पावर बटन), Android जबरन सभी SCREEN_DIM_WAKE_LOCK और SCREEN_BRIGHT_WAKE_LOCK को रिलीज़ करता है लेकिन PARTIAL_WAKE_LOCK को बनाए रखता है। इसका मतलब है कि स्क्रीन लॉक डिस्प्ले को चालू नहीं रख सकता — केवल PARTIAL_WAKE_LOCK पावर बटन दबाने के बाद काम करना जारी रख सकता है।

Android में WakeLock के प्रकार

Android में कई प्रकार के WakeLock होते हैं, प्रत्येक विशिष्ट डिवाइस घटकों को नियंत्रित करता है। प्रकार का चुनाव यह निर्धारित करता है कि लॉक करने के बाद कौन से हार्डवेयर घटक सक्रिय रहते हैं। गलत प्रकार चुनने से अनावश्यक मॉड्यूल के चालू रहने के कारण अत्यधिक बिजली खपत होती है।

प्रकारCPUस्क्रीनकीबोर्डकब उपयोग करें
PARTIAL_WAKE_LOCKचालूबंदबंदफ़ाइल डाउनलोड, गणनाएँ
SCREEN_DIM_WAKE_LOCKचालूमंदबंदवीडियो प्लेयर, प्रस्तुति
SCREEN_BRIGHT_WAKE_LOCKचालूउज्ज्वलबंदगेम (पदावनत)
FULL_WAKE_LOCKचालूउज्ज्वलउज्ज्वलपदावनत (deprecated)

PARTIAL_WAKE_LOCK — मुख्य प्रकार

PARTIAL_WAKE_LOCK सबसे अधिक उपयोग किया जाने वाला और अनुशंसित प्रकार है। यह CPU को सक्रिय रखता है लेकिन स्क्रीन और कीबोर्ड बैकलाइट को बंद करने की अनुमति देता है। यह बैकग्राउंड कार्यों के लिए सबसे अच्छा विकल्प है: डेटा लोडिंग, छवि प्रसंस्करण, सिंक्रनाइज़ेशन। स्क्रीन सिस्टम टाइमआउट के बाद बंद हो जाती है, जिससे उपयोगकर्ता को दिखाई न देने वाले कार्य करते समय बैटरी बचती है।

पदावनत प्रकार (deprecated)

SCREEN_DIM_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK और FULL_WAKE_LOCK Android 7 (API 24) से पदावनत कर दिए गए हैं। वे स्क्रीन को चालू रखते हैं, जिससे महत्वपूर्ण बैटरी खपत होती है। Google इसके बजाय Activity.getWindow().addFlags() के माध्यम से FLAG_KEEP_SCREEN_ON का उपयोग करने की अनुशंसा करता है — यह फ़्लैग केवल तब काम करता है जब Activity सक्रिय हो और WAKE_LOCK अनुमति की आवश्यकता नहीं होती, जबकि सिस्टम स्वचालित रूप से स्क्रीन होल्ड समय का प्रबंधन करता है।

WakeLock और ऊर्जा खपत

WakeLock Android पर बैटरी के मुख्य उपभोक्ताओं में से एक है। स्लीप लॉक रखने का प्रत्येक सेकंड अतिरिक्त ऊर्जा खपत करता है क्योंकि CPU ऊर्जा-कुशल C-state में नहीं जा सकता। Google Power Dashboard अनुसंधान दिखाता है कि अनुचित रूप से रिलीज़ किए गए WakeLock वाले ऐप्स स्टैंडबाय मोड में डिवाइस की ऊर्जा खपत को 30–50% तक बढ़ा सकते हैं।

सिस्टम Battery Historian घटक के माध्यम से WakeLock का दुरुपयोग करने वाले ऐप्स को ट्रैक करता है। डेवलपर ऊर्जा खपत प्रोफ़ाइल का विश्लेषण कर सकता है और लॉक लीक की पहचान कर सकता है — ऐसी स्थितियाँ जहाँ WakeLock बनाया गया लेकिन रिलीज़ नहीं किया गया। Google Play Console प्रकाशित ऐप्स के लिए WakeLock आँकड़े दिखाता है, और उच्च होल्ड समय खराब समीक्षाओं का कारण बन सकता है।

Doze Mode और App Standby WakeLock संचालन को और प्रतिबंधित करते हैं। पहले Doze चरण (Light Doze) में, सिस्टम छोटी रखरखाव विंडो में WakeLock की अनुमति देता है। दूसरे चरण (Deep Doze) में, WakeLock को अन्य लॉक के साथ मिला दिया जाता है और एक सामान्य विंडो में निष्पादित किया जाता है। यदि कोई ऐप उपयोगकर्ता इंटरैक्शन के बिना 10 मिनट से अधिक समय तक WakeLock रखता है, तो सिस्टम इसे जबरन रिलीज़ कर सकता है और ऐप को बैटरी अनुकूलन काली सूची में डाल सकता है।

  • Battery Historian — ऊर्जा खपत और WakeLock लीक के विश्लेषण के लिए उपकरण
  • Doze Mode — रखरखाव विंडो में WakeLock को प्रतिबंधित करता है, लॉक मिलाता है
  • Google Play Console — प्रकाशित ऐप्स के लिए WakeLock आँकड़े दिखाता है
  • काली सूची — ऐप को सिस्टम द्वारा बिजली-भूखा के रूप में चिह्नित किया जा सकता है

उपयोग की सर्वोत्तम प्रथाएँ

WakeLock का सही उपयोग कार्य को पूरा करने की आवश्यकता और डिवाइस की बैटरी की देखभाल के बीच संतुलन है। Google कई सिद्धांतों का पालन करने की अनुशंसा करता है: हमेशा finally ब्लॉक या acquire(timeout) के माध्यम से WakeLock रिलीज़ करें, न्यूनतम आवश्यक लॉक प्रकार का उपयोग करें, और अत्यंत आवश्यकता के बिना लंबे होल्ड से बचें।

रिलीज़ नियम

WakeLock को उसी कोड ब्लॉक में रिलीज़ किया जाना चाहिए जहाँ इसे बनाया गया था। अपवादों पर रिलीज़ सुनिश्चित करने के लिए try-finally निर्माण या Kotlin के use ब्लॉक का उपयोग किया जाता है। Android 10+ पर, यदि WakeLock 60 सेकंड से अधिक समय तक रखा जाता है तो सिस्टम logcat में चेतावनी दिखाता है: "WakeLock held for more than 60 seconds" — यह संभावित लीक का संकेत है।

एक्वायर टाइमआउट

acquire(long timeout) विधि निर्दिष्ट मिलीसेकंड के बाद स्वचालित रूप से WakeLock रिलीज़ करती है। यह इस स्थिति के लिए सुरक्षा है कि अपवाद या बग के कारण रिलीज़ कोड निष्पादित न हो। अधिकतम अपेक्षित कार्य निष्पादन समय प्लस 10–20% मार्जिन के बराबर टाइमआउट निर्दिष्ट करने की हमेशा अनुशंसा की जाती है।

लॉक स्थिति की जाँच

release() कॉल करने से पहले, जाँच करनी चाहिए कि WakeLock वर्तमान में रखा गया है या नहीं। पूर्व acquire() के बिना फिर से release() कॉल करने से RuntimeException: WakeLock under-locked होता है। स्थिति फ़्लैग (isHeld) संग्रहीत करने और रिलीज़ करने से पहले wakeLock.isHeld() जाँचने की अनुशंसा की जाती है।

Kotlin में WakeLock का उपयोग

आइए Kotlin में WakeLock के सही निर्माण और रिलीज़ पर विचार करें। उदाहरण PARTIAL_WAKE_LOCK धारण करके अतुल्यकालिक डेटा लोडिंग, try-finally ब्लॉक में गारंटीकृत रिलीज़ और लीक के खिलाफ सुरक्षा के लिए निर्दिष्ट टाइमआउट प्रदर्शित करता है। सेवा बैकग्राउंड कार्य निष्पादन के लिए IO डिस्पैचर के साथ CoroutineScope का उपयोग करती है।

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() {
        // फ़ाइल डाउनलोड का अनुकरण
        delay(30000)
    }

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

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

मेनिफ़ेस्ट में अनुमति घोषित करना

WakeLock का उपयोग करने के लिए, AndroidManifest.xml में अनुमति जोड़नी होगी। WAKE_LOCK अनुमति एक सामान्य अनुमति है — इसे उपयोगकर्ता से runtime अनुरोध की आवश्यकता नहीं होती और यह ऐप इंस्टॉल होने पर स्वचालित रूप से प्रदान की जाती है। हालाँकि, यदि ऐप में WakeLock का कोई स्पष्ट उपयोग मामला नहीं है तो Google Play प्रकाशन को अस्वीकार कर सकता है।

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

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

WakeLock के विकल्प

WakeLock एक निम्न-स्तरीय तंत्र है, और Google जहाँ संभव हो इसे अधिक आधुनिक APIs से बदलने की अनुशंसा करता है। मुख्य विकल्प नोटिफ़िकेशन के साथ Foreground Service है, जो सेवा की अवधि के लिए स्वचालित रूप से CPU लॉक रखता है। सिस्टम Foreground Service के लिए स्वयं WakeLock प्रबंधित करता है, डेवलपर को स्पष्ट एक्वायर और रिलीज़ से मुक्त करता है।

WorkManager बैकग्राउंड कार्यों के लिए दूसरा सबसे महत्वपूर्ण उपकरण है। यह डिवाइस के Doze मोड में जाने पर भी और रीबूट के बाद कार्य निष्पादन की गारंटी देता है। WorkManager आंतरिक रूप से होल्ड लॉक का समर्थन करता है — डेवलपर को PowerManager के साथ स्पष्ट रूप से काम करने की आवश्यकता नहीं है। कार्य स्वचालित स्लीप लॉक प्रबंधन के साथ Doze रखरखाव विंडो में निष्पादित होता है।

सटीक समय की आवश्यकता वाले आवर्ती कार्यों के लिए, setAndAllowWhileIdle() के साथ AlarmManager का उपयोग किया जाता है, जो डिवाइस को Doze से जगा सकता है। हालाँकि, AlarmManager केवल छोटे संचालन के लिए उपयुक्त है — यह लंबे WakeLock धारण के लिए डिज़ाइन नहीं किया गया है। यदि कार्य 10 सेकंड से अधिक समय लेता है, तो AlarmManager को BroadcastReceiver के साथ संयोजित करें जो Foreground Service शुरू करता है।

  • Foreground Service — नोटिफ़िकेशन के साथ स्वचालित WakeLock प्रबंधन
  • WorkManager — Doze और रीबूट जागरूकता के साथ गारंटीकृत निष्पादन
  • JobScheduler — नेटवर्क, चार्जिंग और निष्क्रियता के साथ शेड्यूलिंग
  • AlarmManager — छोटे शेड्यूल किए गए कार्यों के लिए डिवाइस जगाना

अक्सर पूछे जाने वाले प्रश्न

Android में WakeLock क्या है

WakeLock एक सिस्टम लॉक है जो Android डिवाइस को स्लीप मोड में जाने से रोकता है। यह CPU या स्क्रीन को सक्रिय रखता है, बैकग्राउंड कार्यों (डाउनलोड, गणना) को बिना रुकावट चलने देता है। इसे PowerManager सिस्टम सेवा के माध्यम से प्रबंधित किया जाता है।

WakeLock के कौन से प्रकार मौजूद हैं

मुख्य प्रकार हैं: PARTIAL_WAKE_LOCK (CPU सक्रिय, स्क्रीन बंद) — अनुशंसित; SCREEN_DIM_WAKE_LOCK (CPU + मंद स्क्रीन); SCREEN_BRIGHT_WAKE_LOCK (CPU + उज्ज्वल स्क्रीन)। SCREEN_DIM, SCREEN_BRIGHT और FULL_WAKE_LOCK पदावनत हैं और FLAG_KEEP_SCREEN_ON द्वारा प्रतिस्थापित किए गए हैं।

क्या WakeLock के लिए अनुमति आवश्यक है

हाँ, मेनिफ़ेस्ट में android.permission.WAKE_LOCK घोषित करना आवश्यक है। यह एक सामान्य अनुमति है जो इंस्टॉलेशन पर स्वचालित रूप से प्रदान की जाती है — इसे runtime में माँगने की आवश्यकता नहीं है। इस अनुमति के बिना, newWakeLock() कॉल null लौटाएगा या SecurityException फेंकेगा।

यदि मैं WakeLock रिलीज़ न करूँ तो क्या होगा

यदि release() कॉल नहीं किया जाता, तो डिवाइस स्लीप मोड में नहीं जा सकता। बैटरी काफ़ी तेज़ी से खत्म होगी (50% अतिरिक्त खपत तक)। सिस्टम logcat में लीक लॉग करेगा, और Battery Historian असामान्य WakeLock होल्ड समय दिखाएगा, जिससे उपयोगकर्ता समीक्षाएँ खराब होंगी।

आधुनिक ऐप्स में WakeLock को क्या बदल सकता है

लंबे कार्यों के लिए, नोटिफ़िकेशन के साथ Foreground Service का उपयोग करें — सिस्टम स्वयं WakeLock प्रबंधित करता है। विलंबित और गारंटीकृत कार्यों के लिए, WorkManager का उपयोग करें, जो आंतरिक रूप से WakeLock का समर्थन करता है। छोटे शेड्यूल किए गए कार्यों के लिए, AlarmManager का उपयोग करें।

सारांश

  • WakeLock — एक स्लीप लॉक जो Android डिवाइस के CPU या स्क्रीन को सक्रिय रखता है
  • PARTIAL_WAKE_LOCK — बैकग्राउंड कार्यों के लिए मुख्य प्रकार; स्क्रीन बंद, CPU सक्रिय रहता है
  • अनुमति — मेनिफ़ेस्ट में WAKE_LOCK (सामान्य अनुमति, runtime आवश्यक नहीं)
  • लीक — बिना रिलीज़ किया गया WakeLock बैटरी 30–50% खत्म करता है; finally या टाइमआउट में रिलीज़ करें
  • पदावनत — SCREEN_DIM, SCREEN_BRIGHT और FULL_WAKE_LOCK को FLAG_KEEP_SCREEN_ON से बदला गया
  • Foreground Service — स्वचालित WakeLock प्रबंधन और नोटिफ़िकेशन के साथ विकल्प
  • WorkManager — गारंटीकृत निष्पादन के साथ विलंबित बैकग्राउंड कार्यों के लिए सबसे अच्छा विकल्प

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें