वेक लॉक के इस्तेमाल से जुड़े उदाहरणों की पहचान करना और उन्हें ऑप्टिमाइज़ करना

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

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

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

AlarmManager

AlarmManager, वेक लॉक हासिल करता है और उन्हें कॉल करने वाले ऐप्लिकेशन के लिए एट्रिब्यूट करता है. AlarmManager, अलार्म बजने पर वेक लॉक हासिल करता है. साथ ही, अलार्म ब्रॉडकास्ट के onReceive() तरीके के एक्ज़ीक्यूट होने के बाद, लॉक को रिलीज़ कर देता है.

वेक लॉक के नाम

AlarmManager, *alarm* नाम से वेक लॉक बनाता है. (तारे के निशान, वेक लॉक के नाम का हिस्सा हैं. ये वाइल्ड कार्ड के तौर पर इस्तेमाल नहीं किए जाते.)

सुझाव

हमारा सुझाव है कि अलार्म के व्यवहार को ऑप्टिमाइज़ करने के लिए, ये तरीके अपनाएं:

ऑडियो और मीडिया

ऑडियो रिकॉर्ड करते या चलाते समय, मीडिया एपीआई वेक लॉक हासिल कर सकते हैं. वेक लॉक, कॉल करने वाले ऐप्लिकेशन के लिए एट्रिब्यूट किए जाते हैं.

वेक लॉक के नाम

मीडिया एपीआई, Audio से शुरू होने वाले अलग-अलग नामों से वेक लॉक हासिल करते हैं:

  • AudioBitPerfect: इसका इस्तेमाल, बिना किसी नुकसान के यूएसबी ऑडियो चलाने के लिए किया जाता है.
  • AudioDirectOut: इसका इस्तेमाल, टीवी या खास डिवाइस पर बिना किसी नुकसान के ऑडियो चलाने के लिए किया जाता है.
  • AudioDup: इसका इस्तेमाल, ब्लूटूथ या यूएसबी से कनेक्ट होने पर सूचनाएं चलाने के लिए किया जाता है.
  • AudioIn: इसका इस्तेमाल, माइक्रोफ़ोन चालू होने पर, कैमकोर्डर मोड में ऑडियो कैप्चर करने के लिए किया जाता है.
  • AudioMix: इसका इस्तेमाल, किसी सामान्य डिवाइस पर ऑडियो चलाने के लिए किया जाता है.
  • AudioOffload: इसका इस्तेमाल, सिर्फ़ संगीत चलाने के लिए किया जाता है. यह सुविधा उन ऐप्लिकेशन के लिए उपलब्ध है जो इस मोड के साथ काम करते हैं.
  • AudioSpatial: इसका इस्तेमाल, उन डिवाइसों पर मल्टी-चैनल मूवी या संगीत ऑडियो चलाने के लिए किया जाता है जो स्पेशल ऑडियो के साथ काम करते हैं.
  • AudioUnknown: इसका इस्तेमाल तब किया जाता है, जब अन्य स्थितियां लागू नहीं होती हैं.
  • MmapCapture: इसका इस्तेमाल, कम समय में ऑडियो कैप्चर करने के लिए किया जाता है.
  • MmapPlayback: इसका इस्तेमाल, कम समय में ऑडियो चलाने के लिए किया जाता है. जैसे, गेमिंग या पेशेवर ऑडियो ऐप्लिकेशन के लिए.

सुझाव

हमारा सुझाव है कि ये तरीके अपनाएं:

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

ब्लूटूथ

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

सुझाव

  • ब्लूटूथ डिवाइसों को पेयर करने के लिए, कंपैनियन डिवाइस पेयरिंग का इस्तेमाल करें. इससे ब्लूटूथ पेयरिंग के दौरान, मैन्युअल वेक लॉक हासिल करने से बचा जा सकता है.
  • बैकग्राउंड में ब्लूटूथ से कम्यूनिकेट करने का तरीका जानने के लिए, बैकग्राउंड में कम्यूनिकेट करने के बारे में दिशा-निर्देश देखें.
  • अगर डिलेड कम्यूनिकेशन से उपयोगकर्ता पर कोई असर नहीं पड़ता है, तो अक्सर WorkManager का इस्तेमाल करना काफ़ी होता है. अगर मैन्युअल वेक लॉक को ज़रूरी माना जाता है, तो वेक लॉक को सिर्फ़ ब्लूटूथ गतिविधि या गतिविधि डेटा की प्रोसेसिंग के दौरान ही होल्ड करें.

डिवाइस के सेंसर

डिवाइस के सेंसर डेटा को ट्रैक करने के कई तरीके हैं. जैसे, कदमों की संख्या, एक्सलरोमीटर या जाइरोस्कोप डेटा.

Wear OS पर, डिवाइस का डेटा पाने के लिए Wear Health Services का इस्तेमाल करें. जैसे, ऊंचाई, धड़कन की दर, और तय की गई दूरी.

अगर डेटा अन्य ऐप्लिकेशन इकट्ठा करते हैं, डेटा को समय-समय पर पाने के लिए, आप Health Connect के साथ WorkManager का इस्तेमाल कर सकते हैं.

कदमों की संख्या या तय की गई दूरी के अंतर को ट्रैक करने जैसे उदाहरणों के लिए, डेटा को समय-समय पर पाने के लिए, मोबाइल पर Recording API के साथ WorkManager का इस्तेमाल किया जा सकता है. कदमों की संख्या के पुराने डेटा (जैसे, हर दिन के कुल कदम या पिछले छह घंटों में चले गए कदम) को ऐक्सेस करने के लिए, Health Connect Android 14 या इसके बाद के वर्शन वाले डिवाइसों के लिए, डिवाइस पर कदम ट्रैक करने की सुविधा भी देता है.

कुछ स्थितियों में, डिवाइस के सेंसर को ट्रैक करने के लिए, कस्टम डिवाइस सेंसर ट्रैकिंग की ज़रूरत पड़ सकती है.SensorManager SensorManager ऐप्लिकेशन की ओर से वेक लॉक हासिल नहीं करता. हालांकि, अगर सेंसर, वेक अप सेंसर है, तो isWakeUpSensor API का इस्तेमाल करके इसकी पहचान की जा सकती है.

सुझाव

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

  • कदमों की संख्या या तय की गई दूरी को ट्रैक करने के लिए, बैटरी की खपत कम करने वाले तरीके से डेटा रिकॉर्ड करने के लिए, Recording API का इस्तेमाल करें. Android 14 या इसके बाद के वर्शन वाले डिवाइसों के लिए, डिवाइस के पुराने डेटा और कुल कदमों की संख्या को ऐक्सेस करने के लिए, Health Connect का इस्तेमाल करें.
  • Wear OS पर, पैसिव सेंसर ट्रैकिंग के लिए, बैटरी के इस्तेमाल को ऑप्टिमाइज़ करने के लिए, Wear Health Services का इस्तेमाल करें.
  • SensorManager के साथ सेंसर रजिस्टर करते समय, सेंसर बैचिंग लॉजिक का इस्तेमाल करने और ऐप्लिकेशन को मिलने वाले इंटरप्ट की संख्या कम करने के लिए, maxReportLatencyUs को 30 सेकंड से ज़्यादा पर सेट करें. जब डिवाइस को किसी अन्य ट्रिगर से जगाया जाता है, जैसे कि उपयोगकर्ता का इंटरैक्शन, जगह की जानकारी पाना या शेड्यूल की गई कोई जॉब, तो सिस्टम तुरंत कैश किया गया सेंसर डेटा भेज देगा.
  • अगर आपके ऐप्लिकेशन को जगह की जानकारी और सेंसर डेटा, दोनों की ज़रूरत है, तो इवेंट पाने और प्रोसेस करने की प्रोसेस को सिंक करें. जगह की जानकारी के अपडेट के लिए, सिस्टम वेक लॉक को कम समय के लिए होल्ड करता है. इस दौरान, सेंसर रीडिंग को एक साथ प्रोसेस करके, सीपीयू को चालू रखने के लिए वेक लॉक की ज़रूरत से बचा जा सकता है. इस संयुक्त डेटा को अपलोड और प्रोसेस करने के लिए, वर्कर या कम समय के लिए वेक लॉक का इस्तेमाल करें.

Firebase क्लाउड से मैसेज (FCM)

Firebase क्लाउड से मैसेज (FCM) ब्रॉडकास्ट को ऐप्लिकेशन तक डिलीवर करते समय, वेक लॉक हासिल किया जाता है. FCM ब्रॉडकास्ट के onMessageReceived() तरीके के एक्ज़ीक्यूट होने के बाद, वेक लॉक रिलीज़ हो जाता है.

वेक लॉक के नाम

डिवाइस पर FCM मैसेज मिलने पर, GOOGLE_C2DM नाम से कम समय के लिए वेक लॉक होल्ड किया जाता है. Android 16 या इसके बाद के वर्शन पर, वेक लॉक का नाम GCM_MESSAGE होता है.

सुझाव

हमारा सुझाव है कि FCM के व्यवहार को ऑप्टिमाइज़ करने के लिए, ये तरीके अपनाएं:

  • FCM डिलीवरी की फ़्रीक्वेंसी ऑप्टिमाइज़ करें.
  • ज़्यादा प्राथमिकता वाले FCM का इस्तेमाल तब तक न करें, जब तक मैसेज को तुरंत डिलीवर करने की ज़रूरत न हो.
  • onMessageReceived() तरीके को जल्द से जल्द पूरा करें या अगर अतिरिक्त प्रोसेसिंग की ज़रूरत है, तो टास्क जारी रखने के लिए वर्कर शेड्यूल करें. ज़्यादा जानकारी के लिए, Firebase के दिशा-निर्देश देखें.

JobScheduler

JobScheduler की जॉब, बैकग्राउंड में टास्क एक्ज़ीक्यूट करते समय वेक लॉक हासिल करती हैं. वेक लॉक, उन ऐप्लिकेशन के लिए एट्रिब्यूट किए जाते हैं जिन्होंने वर्कर बनाए हैं.

वेक लॉक के नाम

JobScheduler से हासिल किए गए वेक लॉक के नाम, इस बात पर निर्भर करते हैं कि वे Android सिस्टम के किस वर्शन पर चल रहे हैं और जॉब का मकसद क्या है.

एंगल ब्रैकेट में मौजूद आइटम वैरिएबल होते हैं. उदाहरण के लिए, "<package_name>" आपके ऐप्लिकेशन के पैकेज का नाम है. यह टेक्स्ट <package name> नहीं है. हालांकि, *job*, *job* वर्णों का क्रम है. इसमें तारे के निशान भी शामिल हैं. तारे के निशानों का इस्तेमाल वाइल्ड कार्ड के तौर पर नहीं किया जा रहा है.

Android 15 और इससे पहले के वर्शन

उपयोगकर्ता की ओर से शुरू की गई जॉब, इस पैटर्न के मुताबिक नाम वाले वेक लॉक बनाती हैं:

*job*u/@<name_space>@/<package_name>/<classname>

अन्य जॉब इस पैटर्न का इस्तेमाल करती हैं:

*job*/@<name_space>@/<package_name>/<classname>
Android 16 QPR2 और इसके बाद के वर्शन

उपयोगकर्ता की ओर से शुरू की गई जॉब, इस पैटर्न के मुताबिक नाम वाले वेक लॉक बनाती हैं:

*job*u/@<name_space>@/#<trace_tag>#/<package_name>/<classname>

एक्सपीडिटेड जॉब इस पैटर्न का इस्तेमाल करती हैं:

*job*e/@<name_space>@/#<trace_tag>#/<package_name>/<classname>

सामान्य जॉब इस पैटर्न का इस्तेमाल करती हैं:

*job*r/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
उदाहरण

मान लें कि backup नेमस्पेस और started ट्रेस टैग वाली कोई एक्सपीडिटेड जॉब है. पैकेज का नाम com.example.app है. साथ ही, जॉब बनाने वाली क्लास com.backup.BackupFileService है.

Android 15 या इससे पहले के वर्शन वाले डिवाइसों पर, वेक लॉक का नाम यह होगा:

*job*/@backup@/com.example.app/com.backup.BackupFileService

Android 16 QPR2 या इसके बाद के वर्शन वाले डिवाइसों पर, वेक लॉक का नाम यह होगा:

*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService

सुझाव

  • उपयोगकर्ता की ओर से शुरू किए गए डाउनलोड/ अपलोड के उदाहरणों के लिए, मैन्युअल वेक लॉक हासिल न करें. इसके बजाय, User-Initiated Data Transfer (UIDT) API का इस्तेमाल करें. यह उपयोगकर्ता की ओर से शुरू किए गए, ज़्यादा समय लगने वाले डेटा ट्रांसफ़र के टास्क के लिए तय किया गया पाथ है.
  • अगर आपको JobScheduler से बनाए गए वेक लॉक, वेक लॉक के ज़्यादा इस्तेमाल की वजह से दिखते हैं, तो इसकी वजह यह हो सकती है कि आपने अपनी जॉब को इस तरह कॉन्फ़िगर किया है कि वह कुछ स्थितियों में पूरी न हो. जॉब बंद होने की वजहों का विश्लेषण करें. खास तौर पर, अगर आपको STOP_REASON_TIMEOUT की ज़्यादा घटनाएं दिख रही हैं.
  • JobScheduler के टास्क के इस्तेमाल का ऑडिट करें. खास तौर पर, टास्क शेड्यूल करने वाले एपीआई के लिए, बैटरी के इस्तेमाल को ऑप्टिमाइज़ करने के बारे में हमारे दिशा-निर्देशों का पालन करें .

जगह की जानकारी

LocationManager और FusedLocationProviderClient, डिवाइस की जगह की जानकारी हासिल करने और डिलीवर करने के लिए, वेक लॉक का इस्तेमाल करते हैं. वेक लॉक, उन ऐप्लिकेशन के लिए एट्रिब्यूट किए जाते हैं जिन्होंने इन एपीआई को कॉल किया है.

वेक लॉक के नाम

जगह की जानकारी वाली सेवाएं, इन नामों का इस्तेमाल करती हैं:

  • CollectionLib-SigCollector
  • NetworkLocationLocator
  • NetworkLocationScanner
  • NlpCollectorWakeLock
  • NlpWakeLock
  • *location*

सुझाव

  • जगह की जानकारी के इस्तेमाल को ऑप्टिमाइज़ करने के बारे में हमारे दिशा-निर्देश देखें. टाइमआउट लागू करने, जगह की जानकारी के अनुरोध को बैच करने या पैसिव तरीके से जगह की जानकारी के अपडेट का इस्तेमाल करने पर विचार करें.
  • जगह की जानकारी के डेटा को कैश करने के लिए, अलग से लगातार वेक लॉक हासिल न करें. यह ज़रूरत से ज़्यादा है और इसे हटा दिया जाना चाहिए. जगह की जानकारी के अपडेट का अनुरोध करने पर, FusedLocationProvider या LocationManager एपीआई का इस्तेमाल करके, सिस्टम जगह की जानकारी के इवेंट कॉलबैक के दौरान, डिवाइस को अपने-आप चालू कर देता है. इसके बजाय, जगह की जानकारी के इवेंट को मेमोरी या स्टोरेज में सेव करें. साथ ही, WorkManager का इस्तेमाल करके, समय-समय पर जगह की जानकारी के इवेंट को प्रोसेस करें.

रिमोट मैसेज सेवा

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

  • वीडियो या आवाज़ की निगरानी करने वाले कंपैनियन ऐप्लिकेशन. इन्हें स्थानीय नेटवर्क के ज़रिए कनेक्ट किए गए किसी बाहरी डिवाइस पर होने वाले इवेंट की निगरानी करनी होती है.
  • मैसेजिंग ऐप्लिकेशन, जो डेस्कटॉप वर्शन के साथ नेटवर्क सॉकेट कनेक्शन बनाए रखते हैं.

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

सुझाव

  • अगर नेटवर्क इवेंट को सर्वर साइड पर प्रोसेस किया जा सकता है, तो क्लाइंट पर जानकारी पाने के लिए, FCM का इस्तेमाल करें. FCM डेटा की अतिरिक्त प्रोसेसिंग की ज़रूरत पड़ने पर, एक्सपीडिटेड वर्कर शेड्यूल किया जा सकता है.
  • अगर इवेंट को सॉकेट कनेक्शन का इस्तेमाल करके, क्लाइंट साइड पर प्रोसेस करना है, तो इवेंट इंटरप्ट को सुनने के लिए वेक लॉक की ज़रूरत नहीं होती. जब डेटा पैकेट, वाई-फ़ाई या सेल्युलर रेडियो पर पहुंचते हैं, तो रेडियो हार्डवेयर, कर्नल वेक लॉक के तौर पर इंटरप्ट ट्रिगर करता है. इसके बाद, डेटा को प्रोसेस करने के लिए, वर्कर शेड्यूल किया जा सकता है या वेक लॉक हासिल किया जा सकता है.
  • उदाहरण के लिए, अगर नेटवर्क सॉकेट पर डेटा पैकेट सुनने के लिए, ktor-network का इस्तेमाल किया जा रहा है, तो वेक लॉक सिर्फ़ तब हासिल करें, जब पैकेट क्लाइंट को डिलीवर कर दिए गए हों.

WorkManager

WorkManager के वर्कर, बैकग्राउंड में टास्क एक्ज़ीक्यूट करते समय वेक लॉक हासिल करते हैं. वेक लॉक, उन ऐप्लिकेशन के लिए एट्रिब्यूट किए जाते हैं जिन्होंने वर्कर बनाए हैं.

वेक लॉक के नाम

WorkManager से हासिल किए गए वेक लॉक के नाम, इस बात पर निर्भर करते हैं कि वे Android सिस्टम के किस वर्शन पर चल रहे हैं.

Android 15 और इससे पहले के वर्शन

WorkManager के टास्क, इस पैटर्न के मुताबिक नाम वाले वेक लॉक बनाते हैं:

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 QPR2 और इसके बाद के वर्शन

एक्सपीडिटेड टास्क, इस पैटर्न के मुताबिक नाम वाले वेक लॉक बनाते हैं:

*job*e/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService

सामान्य टास्क इस पैटर्न का इस्तेमाल करते हैं:

*job*r/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService

डिफ़ॉल्ट रूप से, <trace_tag>, वर्कर का नाम होता है.

उदाहरण

मान लें कि BackupFileWorker नाम का कोई एक्सपीडिटेड वर्कर है. पैकेज का नाम com.example.app है.

Android 15 या इससे पहले के वर्शन वाले डिवाइसों पर, वेक लॉक का नाम यह होगा:

*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService

Android 16 QPR2 या इसके बाद के वर्शन वाले और WorkManager 2.10.0+ का इस्तेमाल करने वाले डिवाइसों पर, वेक लॉक का नाम यह होगा:

*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService

सुझाव

  • Android 16 QPR2 या इसके बाद के वर्शन पर, वेक लॉक के टैग को ज़्यादा जानकारी वाला बनाने के लिए, WorkManager के वर्शन को सबसे नए स्टेबल वर्शन पर अपग्रेड करें.
  • WorkManager के वर्कर के इस्तेमाल का ऑडिट करें. खास तौर पर, यह पुष्टि करें कि यह टास्क शेड्यूल करने वाले एपीआई के लिए, बैटरी के इस्तेमाल को ऑप्टिमाइज़ करने के बारे में हमारे दिशा-निर्देशों का पालन करता है. Android 16 QPR2 या इसके बाद के वर्शन पर, वेक लॉक के टैग को ज़्यादा जानकारी वाला बनाने के लिए, वर्कर पर setTraceTag तरीके का इस्तेमाल करके, डीबग करने से जुड़ी ज़्यादा जानकारी जोड़ें. जैसे, किस क्लास ने वर्कर को शेड्यूल किया है.
  • अगर आपको WorkManager से बनाए गए वेक लॉक, वेक लॉक के ज़्यादा इस्तेमाल की वजह से दिखते हैं, तो इसकी वजह यह हो सकती है कि आपने अपने वर्कर को इस तरह कॉन्फ़िगर किया है कि वह कुछ स्थितियों में पूरा न हो. वर्कर बंद होने की वजहों का विश्लेषण करें. खास तौर पर, अगर आपको की ज़्यादा घटनाएं दिख रही हैं STOP_REASON_TIMEOUT.
  • वर्कर बंद होने की वजहों को लॉग करने के अलावा, अपने वर्कर को डीबग करने के बारे में हमारा दस्तावेज़ देखें. साथ ही, यह समझने के लिए कि वेक लॉक कब हासिल और रिलीज़ किए जाते हैं, सिस्टम ट्रेस इकट्ठा करने और उनका विश्लेषण करने पर विचार करें.

_UNKNOWN

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

सुझाव

वेक लॉक के नामकरण के सबसे सही तरीके अपनाएं. साथ ही, वेक लॉक के नाम में पीआईआई का इस्तेमाल न करें . अगर आपको अपने ऐप्लिकेशन के लिए एट्रिब्यूट किया गया कोई वेक लॉक _UNKNOWN नाम से दिखता है, तो यह पता लगाने की कोशिश करें कि यह कौनसा वेक लॉक है. साथ ही, इसे कोई दूसरा नाम दें.