वेक लॉक के सबसे सही तरीकों का पालन करना

वेक लॉक का इस्तेमाल करने से, डिवाइस की परफ़ॉर्मेंस पर असर पड़ सकता है. अगर आपको वेकलॉक का इस्तेमाल करना है, तो इसे सही तरीके से करना ज़रूरी है. इस दस्तावेज़ में, वेक लॉक के इस्तेमाल के कुछ सबसे सही तरीके बताए गए हैं. इनकी मदद से, वेक लॉक से जुड़ी आम समस्याओं से बचा जा सकता है.

वेक लॉक का सही नाम दें

हमारा सुझाव है कि वेकलॉक टैग में अपने पैकेज, क्लास या तरीके का नाम शामिल करें. इस तरह, अगर कोई गड़बड़ी होती है, तो आपके सोर्स कोड में उस जगह का पता लगाना आसान हो जाता है जहां वेक लॉक बनाया गया था. यहां कुछ और सुझाव दिए गए हैं:

  • नाम में, व्यक्तिगत पहचान से जुड़ी कोई भी जानकारी (पीआईआई) शामिल न करें. जैसे, ईमेल पता. अगर डिवाइस को वेक लॉक टैग में पीआईआई का पता चलता है, तो वह आपके तय किए गए टैग के बजाय _UNKNOWN को लॉग करता है.
  • क्लास या तरीके का नाम प्रोग्राम के हिसाब से न पाएं. उदाहरण के लिए, getName() को कॉल करके. अगर प्रोग्राम के हिसाब से नाम पाने की कोशिश की जाती है, तो हो सकता है कि Proguard जैसे टूल की वजह से नाम न दिखे. इसके बजाय, हार्ड-कोड की गई स्ट्रिंग का इस्तेमाल करें.
  • वेक लॉक टैग में काउंटर या यूनीक आइडेंटिफ़ायर न जोड़ें. वेक लॉक बनाने वाले कोड को हर बार एक ही टैग का इस्तेमाल करना चाहिए. इस तरीके से, सिस्टम को हर तरीके के वेक लॉक के इस्तेमाल की जानकारी मिलती है.

पक्का करें कि आपका ऐप्लिकेशन फ़ोरग्राउंड में दिख रहा हो

वेक लॉक चालू होने पर, डिवाइस की बैटरी खर्च होती है. डिवाइस के उपयोगकर्ता को यह पता होना चाहिए कि ऐसा हो रहा है. इस वजह से, अगर वेक लॉक का इस्तेमाल किया जा रहा है, तो आपको उपयोगकर्ता को कोई सूचना दिखानी चाहिए. असल में, इसका मतलब है कि आपको फ़ोरग्राउंड सेवा में वेकलॉक को पाना और उसे बनाए रखना चाहिए. सूचना दिखाने के लिए, फ़ोरग्राउंड सेवाओं का इस्तेमाल करना ज़रूरी है.

अगर फ़ोरग्राउंड सेवा आपके ऐप्लिकेशन के लिए सही विकल्प नहीं है, तो आपको वेक लॉक का इस्तेमाल भी नहीं करना चाहिए. जब आपका ऐप्लिकेशन फ़ोरग्राउंड में न हो, तब भी काम करने के अन्य तरीकों के बारे में जानने के लिए, डिवाइस को चालू रखने के लिए सही एपीआई चुनें दस्तावेज़ देखें.

लॉजिक को आसान रखना

पक्का करें कि वेक लॉक पाने और छोड़ने का लॉजिक जितना हो सके उतना आसान हो. जब वेक लॉक लॉजिक, जटिल स्टेट मशीन, टाइमआउट, एक्ज़ीक्यूटर पूल या कॉलबैक इवेंट से जुड़ा होता है, तो उस लॉजिक में मौजूद कोई भी मामूली गड़बड़ी, वेक लॉक को उम्मीद से ज़्यादा समय तक चालू रख सकती है. इन गड़बड़ियों का पता लगाना और इन्हें डीबग करना मुश्किल होता है.

जांच करें कि वेक लॉक हमेशा रिलीज़ हो

अगर वेक लॉक का इस्तेमाल किया जाता है, तो यह पक्का करना ज़रूरी है कि आपने जितने भी वेक लॉक हासिल किए हैं उन्हें सही तरीके से रिलीज़ किया गया हो. यह हमेशा उतना आसान नहीं होता जितना लगता है. उदाहरण के लिए, इस कोड में समस्या है:

Kotlin

@Throws(MyException::class)
fun doSomethingAndRelease() {
    wakeLock.apply {
        acquire()
        doTheWork() // can potentially throw MyException
        release()   // does not run if an exception is thrown
    }
}

Java

void doSomethingAndRelease() throws MyException {
    wakeLock.acquire();
    doTheWork();         // can potentially throw MyException
    wakeLock.release();  // does not run if an exception is thrown
}

यहां समस्या यह है कि doTheWork() तरीके से MyException अपवाद दिया जा सकता है. अगर ऐसा होता है, तो doSomethingAndRelease() वाला तरीका, अपवाद को बाहर की ओर फैलाता है. साथ ही, यह कभी भी release() कॉल तक नहीं पहुंचता. इसका नतीजा यह होता है कि वेक लॉक हासिल कर लिया जाता है, लेकिन उसे रिलीज़ नहीं किया जाता. यह बहुत खराब है.

सुधारे गए कोड में, doSomethingAndRelease() यह पक्का करता है कि अपवाद होने पर भी वेक लॉक रिलीज़ हो जाए:

Kotlin

@Throws(MyException::class)
fun doSomethingAndRelease() {
    wakeLock.apply {
        try {
            acquire()
            doTheWork()
        } finally {
            release()
        }
    }
}

Java

void doSomethingAndRelease() throws MyException {
    try {
        wakeLock.acquire();
        doTheWork();
    } finally {
        wakeLock.release();
    }
}