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

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

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

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

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 API का इस्तेमाल करके की जा सकती है.

सुझाव

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

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

Firebase Cloud Message (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.1 और इसके बाद के वर्शन

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

*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.1 या इसके बाद के वर्शन पर चलने वाले डिवाइसों पर, वेक लॉक का नाम यह होगा:

*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 API का इस्तेमाल करके, जगह की जानकारी के अपडेट का अनुरोध करने पर, सिस्टम जगह की जानकारी के इवेंट कॉलबैक के दौरान डिवाइस को अपने-आप चालू कर देता है. इसके बजाय, जगह की जानकारी से जुड़े इवेंट को मेमोरी या स्टोरेज में सेव करें. इसके बाद, WorkManager का इस्तेमाल करके, जगह की जानकारी से जुड़े इवेंट को समय-समय पर प्रोसेस करें.

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

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

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

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

सुझाव

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

WorkManager

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

वेक लॉक के नाम

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

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

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

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

तेज़ी से पूरे होने वाले टास्क, इस पैटर्न के हिसाब से वेक लॉक बनाते हैं:

*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 या इसके बाद के वर्शन पर काम करने वाले और WorkManager 2.10.0+ का इस्तेमाल करने वाले डिवाइसों पर, वेक लॉक का नाम यह होगा:

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

सुझाव

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

_UNKNOWN

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

सुझाव

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