कई लाइब्रेरी और सिस्टम एपीआई, ऐसे वेक लॉक हासिल कर सकते हैं जो आपके ऐप्लिकेशन से जुड़े होते हैं. इससे, आपके ऐप्लिकेशन में उस वेक लॉक की पहचान करना मुश्किल हो सकता है जिसकी वजह से समस्या हो रही है. किसी एपीआई का गलत इस्तेमाल करने पर, हो सकता है कि आपका ऐप्लिकेशन बहुत देर तक वेक लॉक को होल्ड करे. भले ही, आपने वेक लॉक एपीआई को सीधे तौर पर कॉल न किया हो.
इस दस्तावेज़ में, वेक लॉक के कुछ सामान्य नामों की सूची दी गई है. ये नाम, वेक लॉक डीबगिंग टूल का इस्तेमाल करने पर दिख सकते हैं. आपको ये नाम, Android की ज़रूरी जानकारी से मिली रिपोर्ट में भी दिख सकते हैं. कुछ मामलों में, हो सकता है कि लाइब्रेरी या सिस्टम एपीआई ने वॉक लॉक बनाया हो. अन्य मामलों में, टूल आपके ऐप्लिकेशन में इस्तेमाल किए गए वेक लॉक के नाम को छिपाने की वजह बताता है. गलत तरीके से काम करने वाले वेक लॉक की पहचान करने के लिए, डीबगिंग टूल का इस्तेमाल किया जा सकता है. इसके बाद, इस दस्तावेज़ में वेक लॉक का नाम देखें. इससे यह पता चलेगा कि समस्या किस एपीआई की वजह से हो रही है और उसे कैसे ठीक किया जा सकता है.
इस दस्तावेज़ में, वेक लॉक के इन नामों के बारे में बताया गया है. हर मामले में, वॉकी-अप लॉक को किसी दूसरी लाइब्रेरी या एपीआई से बनाया जा सकता है. हालांकि, लॉक का क्रेडिट उस ऐप्लिकेशन को दिया जाता है जिसने उस एपीआई को कॉल किया था.
*alarm*
:AlarmManager
ने बनाया.AudioIn
,AudioMix
: Media API से बनाए गए.GOOGLE_C2DM
: ऐप्लिकेशन पर Firebase क्लाउड से मैसेज (FCM) ब्रॉडकास्ट डिलीवर करते समय हासिल किया गया.*job*/<package_name>/<package_and_job_name>
: JobScheduler जॉब से बनाई गई.*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
: WorkManager वर्कर्स ने बनाया है.NetworkLocationLocator
,FusedLocation
,*location*
: जगह की जानकारी देने वाले एपीआई से जनरेट किए गए._UNKNOWN
: डीबगिंग टूल से दिखता है. ऐसा तब होता है, जब सक्रियता लॉक के नाम में व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई) का इस्तेमाल किया गया हो.
*alarm*
AlarmManager
, इस वेक लॉक को हासिल करता है और इसे कॉल करने वाले ऐप्लिकेशन को एट्रिब्यूट करता है. अलार्म बंद होने पर AlarmManager
, वेक लॉक हासिल करता है और अलार्म ब्रॉडकास्ट का onReceive()
तरीका लागू होने के बाद, लॉक को रिलीज़ करता है.
सुझाव
हमारा सुझाव है कि आप अलार्म के काम करने के तरीके को ऑप्टिमाइज़ करने के लिए, ये तरीके अपनाएं:
- अलार्म शेड्यूल करने की फ़्रीक्वेंसी को ऑप्टिमाइज़ करने के लिए,
AlarmManager
का इस्तेमाल करें. - ज़रूरी होने पर ही,
RTC_WAKEUP
अलार्म (जो डिवाइस को जगा देते हैं) का इस्तेमाल करें. - अलार्म का कम से कम इस्तेमाल करें और
onReceive()
वाले तरीके से लंबा काम करने से बचें.
AudioIn
, AudioMix
वगैरह.
ऑडियो रिकॉर्ड करने या चलाने के दौरान, मीडिया एपीआई कई वेक लॉक हासिल करते हैं. इन वेक लॉक के नाम Audio
से शुरू होते हैं. वेक लॉक, कॉल करने वाले ऐप्लिकेशन को एट्रिब्यूट किए जाते हैं.
AudioIn
को कैमकोर्डर मोड में AudioRecord
कैप्चर करने के दौरान हासिल किया जाता है. ऐसा तब किया जाता है, जब माइक्रोफ़ोन चालू हो. AudioMix
को डिवाइस पर AudioTrack
वीडियो चलाने के दौरान हासिल किया जाता है. अन्य मीडिया एपीआई, Audio
से शुरू होने वाले अन्य नामों के साथ वेक लॉक हासिल कर सकते हैं.
सुझाव
हमारा सुझाव है कि आप ये तरीके अपनाएं:
Audio
से शुरू होने वाले वेक लॉक के नाम इस्तेमाल न करें.- अगर मीडिया एपीआई का इस्तेमाल किया जा रहा है, तो आपको सीधे तौर पर वेक लॉक हासिल करने की ज़रूरत नहीं है. ज़रूरी वेक लॉक हासिल करने के लिए, एपीआई का इस्तेमाल किया जा सकता है.
- मीडिया एपीआई का इस्तेमाल करते समय, जब आपको मीडिया सेशन की ज़रूरत न हो, तो उसे खत्म कर दें.
GOOGLE_C2DM
ऐप्लिकेशन पर Firebase क्लाउड मैसेज (FCM) ब्रॉडकास्ट डिलीवर करते समय, GCM इस वेक लॉक को हासिल करता है. FCM ब्रॉडकास्ट onMessageReceived()
का तरीका पूरा होने के बाद, वेक लॉक रिलीज़ हो जाता है.
सुझाव
हमारा सुझाव है कि FCM के व्यवहार को ऑप्टिमाइज़ करने के लिए, ये तरीके अपनाएं:
- FCM डिलीवरी की फ़्रीक्वेंसी को ऑप्टिमाइज़ करें.
- ज़्यादा प्राथमिकता वाले FCM का इस्तेमाल तब तक न करें, जब तक मैसेज को तुरंत डिलीवर करने की ज़रूरत न हो.
onMessageReceived()
से पेमेंट करने का तरीका जल्द से जल्द सेट अप करें. ज़्यादा जानकारी के लिए, Firebase से जुड़ी गाइडलाइन देखें.
*job*/<package_name>/<package_and_job_name>
बैकग्राउंड में टास्क पूरा करते समय, JobScheduler जॉब इन वेक लॉक का इस्तेमाल करते हैं. वेक लॉक, उस ऐप्लिकेशन को एट्रिब्यूट किए जाते हैं जिसने वर्कर्स बनाए हैं.
"<package_name>" आपके ऐप्लिकेशन के पैकेज का नाम है, न कि <package name>
टेक्स्ट. इसी तरह, "<package_and_job_name>", पैकेज का नाम है. इसके बाद, जॉब का नाम आता है. *job*
, तारे के निशान के साथ *job*
कैरेक्टर का क्रम है. तारे के निशान का इस्तेमाल वाइल्डकार्ड के तौर पर नहीं किया जा रहा है.
यहां ऐसे वेक लॉक के नाम का उदाहरण दिया गया है:
*job*/com.example.app/com.example.app.example.path.ExampleJobService
सुझाव
JobScheduler टास्क के इस्तेमाल का ऑडिट करें. खास तौर पर, टास्क शेड्यूलिंग एपीआई के लिए बैटरी के इस्तेमाल को ऑप्टिमाइज़ करने के लिए, हमारे दिशा-निर्देशों का पालन करें.
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
बैकग्राउंड में टास्क को पूरा करते समय, WorkManager वर्कर्स इन वेक लॉक का इस्तेमाल करते हैं. वेक लॉक, उस ऐप्लिकेशन को एट्रिब्यूट किए जाते हैं जिसने वर्कर्स बनाए हैं.
"<package_name>" आपके ऐप्लिकेशन के पैकेज का नाम है, न कि <package name>
टेक्स्ट. *job*
, तारे के निशान के साथ *job*
कैरेक्टर का क्रम है. तारे के निशान का इस्तेमाल वाइल्डकार्ड के तौर पर नहीं किया जा रहा है.
सुझाव
WorkManager वर्कर्स के इस्तेमाल का ऑडिट करें. खास तौर पर, टास्क शेड्यूलिंग एपीआई के लिए बैटरी के इस्तेमाल को ऑप्टिमाइज़ करने के लिए, हमारे दिशा-निर्देशों का पालन करें.
NetworkLocationLocator
, FusedLocation
, *location*
डिवाइस की जगह की जानकारी पाने और डिलीवर करने के लिए, LocationManager
और
FusedLocationProviderClient
इन वेक लॉक के नाम का इस्तेमाल करते हैं. वेक लॉक उस ऐप्लिकेशन को एट्रिब्यूट किए जाते हैं जिसने उन एपीआई को कॉल किया है.
सुझाव
जगह की जानकारी के इस्तेमाल को ऑप्टिमाइज़ करना. उदाहरण के लिए, टाइम आउट सेट करना, जगह की जानकारी के अनुरोधों को एक साथ भेजना या जगह की जानकारी के अपडेट का इस्तेमाल करना.
_UNKNOWN
अगर डीबगिंग टूल को लगता है कि किसी वेक लॉक के नाम में व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई) शामिल है, तो वे वेक लॉक का असल नाम नहीं दिखाते. इसके बजाय, वे _UNKNOWN
के तौर पर वॉकी-अप लॉक को लेबल करते हैं. उदाहरण के लिए, अगर वॉकी-अप स्क्रीन के नाम में कोई ईमेल पता शामिल है, तो टूल ऐसा कर सकते हैं.
सुझाव
सक्रियता लॉक के नाम रखने के सबसे सही तरीकों का पालन करें. साथ ही, सक्रियता लॉक के नाम में व्यक्तिगत पहचान से जुड़ी जानकारी का इस्तेमाल करने से बचें. अगर आपको अपने ऐप्लिकेशन के लिए _UNKNOWN
नाम का कोई वेक लॉक मिलता है, तो यह पता लगाने की कोशिश करें कि वह कौनसा वेक लॉक है और उसे कोई दूसरा नाम दें.