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

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

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

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

  • नाम में व्यक्तिगत पहचान से जुड़ी कोई भी जानकारी (पीआईआई) शामिल न करें. जैसे, ईमेल पता. अगर डिवाइस को वेक लॉक टैग में व्यक्तिगत पहचान से जुड़ी जानकारी मिलती है, तो वह आपके तय किए गए टैग के बजाय _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();
    }
}