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

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

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

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

AlarmManager

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

वेक लॉक के नाम

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

सुझाव

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

  • इनएग्ज़ैक्ट या एग्ज़ैक्ट अलार्म में से किसी एक को चुनने के लिए, अलार्म का टाइप चुनें पर जाएं. अगर आपके अलार्म को सटीक होने की ज़रूरत नहीं है, तो इनएग्ज़ैक्ट अलार्म का इस्तेमाल करें. इससे सिस्टम को शेड्यूल करने में ज़्यादा सुविधा मिलती है. इससे बैटरी लाइफ़ बेहतर हो सकती है.
  • सिस्टम के तय किए गए अलार्म कोटा के बारे में जानें और अपने ऐप्लिकेशन को इस तरह डिज़ाइन करें कि वह उनका पालन करे.
  • onReceive() तरीके में ज़्यादा समय लेने वाले काम करने से बचें. साथ ही, अगर अलार्म के बाद अतिरिक्त प्रोसेसिंग की ज़रूरत है, तो वर्कर शेड्यूल करें.

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

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

वेक लॉक के नाम

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

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

सुझाव

हम आपको ये तरीके अपनाने का सुझाव देते हैं:

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

ब्लूटूथ

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

सुझाव

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

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

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

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

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

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

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

सुझाव

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

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

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) एपीआई का इस्तेमाल करें. यह उपयोगकर्ता की ओर से शुरू किए गए, लंबे समय तक चलने वाले डेटा ट्रांसफ़र टास्क के लिए तय किया गया पाथ है.
  • अगर आपको JobScheduler से बनाए गए ऐसे वेक लॉक मिलते हैं जिनका इस्तेमाल ज़्यादा है, तो ऐसा हो सकता है कि आपने अपने जॉब को गलत तरीके से कॉन्फ़िगर किया हो. इस वजह से, कुछ मामलों में जॉब पूरा नहीं हो पाता. जॉब के रुकने की वजहों का विश्लेषण करें. खास तौर पर, अगर आपको STOP_REASON_TIMEOUT की गड़बड़ी बार-बार दिख रही है.
  • JobScheduler टास्क के इस्तेमाल का ऑडिट करें. खास तौर पर, टास्क शेड्यूल करने वाले एपीआई के लिए बैटरी के इस्तेमाल को ऑप्टिमाइज़ करने से जुड़े हमारे दिशा-निर्देशों का पालन करें.

जगह

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

वेक लॉक के नाम

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

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

सुझाव

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

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

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

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

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

सुझाव

  • अगर नेटवर्क इवेंट को सर्वर-साइड पर प्रोसेस किया जा सकता है, तो क्लाइंट पर जानकारी पाने के लिए 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 नाम का कोई वेक लॉक मिलता है, तो यह पता लगाने की कोशिश करें कि वह कौनसा वेक लॉक है. इसके बाद, उसे कोई दूसरा नाम दें.