WakeLock एक Android तंत्र है जो CPU या स्क्रीन को सक्रिय रखकर डिवाइस को स्लीप मोड में जाने से रोकता है। फ़ाइल डाउनलोड, ऑडियो प्लेबैक या डेटा रिकॉर्डिंग जैसे बैकग्राउंड कार्यों को बिना रुकावट के निष्पादन सुनिश्चित करने के लिए WakeLock की आवश्यकता होती है। Android Developers, 2025 विनिर्देश के अनुसार, WakeLock का अनुचित उपयोग बैटरी को तेज़ी से खत्म करता है और Google Play पर ऐप के ब्लॉक होने का कारण बन सकता है।
मुख्य बातें
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 उन परिदृश्यों में आवश्यक है जहाँ कार्य डिवाइस के स्लीप में जाने से बाधित नहीं हो सकता: अस्थिर कनेक्शन पर बड़ी फ़ाइल डाउनलोड करना, वीडियो रिकॉर्ड करना, उपयोगकर्ता के इंटरैक्शन के बिना लंबी गणना करना। स्लीप लॉक के बिना, CPU गहरी नींद में चला जाता है, सभी थ्रेड फ़्रीज़ हो जाते हैं, और कार्य अधूरा रह जाता है।
हालाँकि, Google WakeLock के उपयोग को कम करने की दृढ़ता से अनुशंसा करता है। अधिकांश मामलों में,उसी कार्य को Foreground Service नोटिफ़िकेशन, WorkManager या JobScheduler के साथ हल किया जा सकता है। ये तंत्र बैटरी और नेटवर्क स्थिति को ध्यान में रखते हैं, जिससे डिवाइस की बैटरी लाइफ बढ़ती है।
WakeLock PowerManager सिस्टम सेवा के माध्यम से काम करता है, जो डिवाइस की बिजली स्थिति का प्रबंधन करती है। जब कोई ऐप powerManager.newWakeLock() के माध्यम से लॉक का अनुरोध करता है, तो सिस्टम CPU गतिविधि स्तर बढ़ाता है, गहरी नींद को रोकता है। wakeLock.release() कॉल करने के बाद, सिस्टम सामान्य बिजली बचत मोड पर लौट आता है।
यह समझना महत्वपूर्ण है कि WakeLock सभी बिजली बचत मोड को नहीं रोकता। Doze Mode (Android 6+ का स्लीप मोड) कुछ चरणों में WakeLock को अनदेखा कर सकता है — WakeLock रखने वाले ऐप को Doze रखरखाव विंडो के दौरान नेटवर्क एक्सेस नहीं मिलेगा। इसका मतलब है कि सक्रिय WakeLock भी Doze के दूसरे चरण के दौरान नेटवर्क संचालन की गारंटी नहीं देता।
प्रत्येक WakeLock फ्रेमवर्क पक्ष पर PowerManager.WakeLock से जुड़ा होता है। सिस्टम प्रक्रिया स्तर पर सक्रिय लॉक की गणना करता है: यदि एक प्रक्रिया कई WakeLock रखती है, तो वे जमा होते हैं, और रिलीज़ केवल प्रत्येक लॉक के लिए release() कॉल करने के बाद होती है। Android वेक लॉक टाइमआउट भी समर्थन करता है — निर्दिष्ट अंतराल के बाद स्वचालित रिलीज़। हालाँकि, टाइमआउट पर भरोसा करने की अनुशंसा नहीं की जाती: कार्य पहले पूरा हो सकता है, और अतिरिक्त होल्ड समय बैटरी जीवन कम करेगा।
जब डिवाइस स्लीप मोड में जाता है (पावर बटन), Android जबरन सभी SCREEN_DIM_WAKE_LOCK और SCREEN_BRIGHT_WAKE_LOCK को रिलीज़ करता है लेकिन PARTIAL_WAKE_LOCK को बनाए रखता है। इसका मतलब है कि स्क्रीन लॉक डिस्प्ले को चालू नहीं रख सकता — केवल PARTIAL_WAKE_LOCK पावर बटन दबाने के बाद काम करना जारी रख सकता है।
Android में कई प्रकार के WakeLock होते हैं, प्रत्येक विशिष्ट डिवाइस घटकों को नियंत्रित करता है। प्रकार का चुनाव यह निर्धारित करता है कि लॉक करने के बाद कौन से हार्डवेयर घटक सक्रिय रहते हैं। गलत प्रकार चुनने से अनावश्यक मॉड्यूल के चालू रहने के कारण अत्यधिक बिजली खपत होती है।
| प्रकार | CPU | स्क्रीन | कीबोर्ड | कब उपयोग करें |
|---|---|---|---|---|
| PARTIAL_WAKE_LOCK | चालू | बंद | बंद | फ़ाइल डाउनलोड, गणनाएँ |
| SCREEN_DIM_WAKE_LOCK | चालू | मंद | बंद | वीडियो प्लेयर, प्रस्तुति |
| SCREEN_BRIGHT_WAKE_LOCK | चालू | उज्ज्वल | बंद | गेम (पदावनत) |
| FULL_WAKE_LOCK | चालू | उज्ज्वल | उज्ज्वल | पदावनत (deprecated) |
PARTIAL_WAKE_LOCK सबसे अधिक उपयोग किया जाने वाला और अनुशंसित प्रकार है। यह CPU को सक्रिय रखता है लेकिन स्क्रीन और कीबोर्ड बैकलाइट को बंद करने की अनुमति देता है। यह बैकग्राउंड कार्यों के लिए सबसे अच्छा विकल्प है: डेटा लोडिंग, छवि प्रसंस्करण, सिंक्रनाइज़ेशन। स्क्रीन सिस्टम टाइमआउट के बाद बंद हो जाती है, जिससे उपयोगकर्ता को दिखाई न देने वाले कार्य करते समय बैटरी बचती है।
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 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 रखता है, तो सिस्टम इसे जबरन रिलीज़ कर सकता है और ऐप को बैटरी अनुकूलन काली सूची में डाल सकता है।
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 के सही निर्माण और रिलीज़ पर विचार करें। उदाहरण PARTIAL_WAKE_LOCK धारण करके अतुल्यकालिक डेटा लोडिंग, try-finally ब्लॉक में गारंटीकृत रिलीज़ और लीक के खिलाफ सुरक्षा के लिए निर्दिष्ट टाइमआउट प्रदर्शित करता है। सेवा बैकग्राउंड कार्य निष्पादन के लिए IO डिस्पैचर के साथ CoroutineScope का उपयोग करती है।
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 प्रकाशन को अस्वीकार कर सकता है।
<uses-permission
android:name="android.permission.WAKE_LOCK" />
<uses-permission
android:name="android.permission.DEVICE_POWER" />
WakeLock एक निम्न-स्तरीय तंत्र है, और Google जहाँ संभव हो इसे अधिक आधुनिक APIs से बदलने की अनुशंसा करता है। मुख्य विकल्प नोटिफ़िकेशन के साथ Foreground Service है, जो सेवा की अवधि के लिए स्वचालित रूप से CPU लॉक रखता है। सिस्टम Foreground Service के लिए स्वयं WakeLock प्रबंधित करता है, डेवलपर को स्पष्ट एक्वायर और रिलीज़ से मुक्त करता है।
WorkManager बैकग्राउंड कार्यों के लिए दूसरा सबसे महत्वपूर्ण उपकरण है। यह डिवाइस के Doze मोड में जाने पर भी और रीबूट के बाद कार्य निष्पादन की गारंटी देता है। WorkManager आंतरिक रूप से होल्ड लॉक का समर्थन करता है — डेवलपर को PowerManager के साथ स्पष्ट रूप से काम करने की आवश्यकता नहीं है। कार्य स्वचालित स्लीप लॉक प्रबंधन के साथ Doze रखरखाव विंडो में निष्पादित होता है।
सटीक समय की आवश्यकता वाले आवर्ती कार्यों के लिए, setAndAllowWhileIdle() के साथ AlarmManager का उपयोग किया जाता है, जो डिवाइस को Doze से जगा सकता है। हालाँकि, AlarmManager केवल छोटे संचालन के लिए उपयुक्त है — यह लंबे WakeLock धारण के लिए डिज़ाइन नहीं किया गया है। यदि कार्य 10 सेकंड से अधिक समय लेता है, तो AlarmManager को BroadcastReceiver के साथ संयोजित करें जो Foreground Service शुरू करता है।
अक्सर पूछे जाने वाले प्रश्न
WakeLock एक सिस्टम लॉक है जो Android डिवाइस को स्लीप मोड में जाने से रोकता है। यह CPU या स्क्रीन को सक्रिय रखता है, बैकग्राउंड कार्यों (डाउनलोड, गणना) को बिना रुकावट चलने देता है। इसे PowerManager सिस्टम सेवा के माध्यम से प्रबंधित किया जाता है।
मुख्य प्रकार हैं: 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 द्वारा प्रतिस्थापित किए गए हैं।
हाँ, मेनिफ़ेस्ट में android.permission.WAKE_LOCK घोषित करना आवश्यक है। यह एक सामान्य अनुमति है जो इंस्टॉलेशन पर स्वचालित रूप से प्रदान की जाती है — इसे runtime में माँगने की आवश्यकता नहीं है। इस अनुमति के बिना, newWakeLock() कॉल null लौटाएगा या SecurityException फेंकेगा।
यदि release() कॉल नहीं किया जाता, तो डिवाइस स्लीप मोड में नहीं जा सकता। बैटरी काफ़ी तेज़ी से खत्म होगी (50% अतिरिक्त खपत तक)। सिस्टम logcat में लीक लॉग करेगा, और Battery Historian असामान्य WakeLock होल्ड समय दिखाएगा, जिससे उपयोगकर्ता समीक्षाएँ खराब होंगी।
लंबे कार्यों के लिए, नोटिफ़िकेशन के साथ Foreground Service का उपयोग करें — सिस्टम स्वयं WakeLock प्रबंधित करता है। विलंबित और गारंटीकृत कार्यों के लिए, WorkManager का उपयोग करें, जो आंतरिक रूप से WakeLock का समर्थन करता है। छोटे शेड्यूल किए गए कार्यों के लिए, AlarmManager का उपयोग करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें