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 درکار ہے لیکن رن ٹائم میں نہیں مانگی جاتی
  • خطرات — غیر جاری کردہ 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 اجازت ایک عام اجازت ہے — اسے صارف سے رن ٹائم کی درخواست کی ضرورت نہیں ہوتی اور ایپ انسٹال ہونے پر خود بخود فراہم ہو جاتی ہے۔ تاہم، اگر ایپ کے پاس 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 کا اعلان کرنا ضروری ہے۔ یہ ایک عام اجازت ہے جو انسٹالیشن پر خود بخود فراہم ہو جاتی ہے — اسے رن ٹائم میں مانگنے کی ضرورت نہیں ہے۔ اس اجازت کے بغیر، 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 (عام اجازت، رن ٹائم ضروری نہیں)
  • لیک — غیر جاری کردہ WakeLock بیٹری 30–50% ختم کرتا ہے؛ finally یا ٹائم آؤٹ میں جاری کریں
  • متروک — SCREEN_DIM، SCREEN_BRIGHT اور FULL_WAKE_LOCK کو FLAG_KEEP_SCREEN_ON سے بدل دیا گیا
  • Foreground Service — خودکار WakeLock انتظام اور اطلاع کے ساتھ متبادل
  • WorkManager — یقینی عملدرآمد کے ساتھ موخر پس منظر کے کاموں کے لیے بہترین انتخاب

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں