कैसे (अनाथ) WakeLocks से निपटने के लिए?


40

मुझे लगता है कि आप में से अधिकांश ने कम से कम वेक्लेक्स के बारे में सुना होगा । आपमें से कई लोगों ने उन्हें पहले से ही अनुभव किया होगा - जानबूझकर या नहीं। कुछ लोग सामान्य रूप से उनके साथ व्यवहार करना जानते हैं - लेकिन कुछ ही जानते हैं कि "अधिक जटिल उम्मीदवारों" से कैसे निपटना है।

जो लोग नहीं जानते हैं, हालांकि उपरोक्त लिंक एक स्पष्टीकरण की ओर जाता है, एक संक्षिप्त सारांश: ऐप्स WAKE_LOCK"सो" से डिवाइस घटक रखने के लिए अनुरोध कर सकते हैं, इसलिए वे प्रदर्शन बंद होने पर भी एक कार्य कर सकते हैं। यह ज्यादातर मामलों में बहुत उपयोगी है (जैसे कि नेविगेट करते समय स्क्रीन को चालू रखना, वाईफाई को स्ट्रीम संगीत के लिए सक्रिय रखना) - लेकिन गलत तरीके से उपयोग किया जाता है, यह आपकी बैटरी को अल्पावधि (प्रति घंटे 25% तक) में सूखा देता है। ।

अधिकांश बार स्रोत की पहचान करना आसान होता है (आमतौर पर एक बुरा व्यवहार करने वाला ऐप) - मैं इसे नीचे दिए गए उत्तर में दिखाऊंगा, क्योंकि यह कई उपयोगकर्ताओं के लिए मददगार साबित हो सकता है। लेकिन क्या होगा अगर वो ऐप जिसने WakeLock से रिक्वेस्ट की, उसे रिलीज़ किए बिना ही निकल जाए? एंड्रॉइड सिस्टम इसका ध्यान नहीं रखेगा । ज़रूर, एक रिबूट समस्या को हल करेगा - लेकिन यह हमेशा (वांछित) विकल्प नहीं है।

इसलिए, एक उपयोगकर्ता के दृष्टिकोण से (मैं विकास समाधानों के बारे में नहीं पूछ रहा हूं, लेकिन एक उपयोगकर्ता चीजों को कैसे संभाल सकता है):

समस्या को हल करने और आगे की बैटरी ड्रेन से बचने के लिए उपयोगकर्ता * द्वारा क्या किया जा सकता है ?

मैं उन उत्तरों को शामिल करना पसंद करता हूं जिनमें रूट शामिल नहीं है (इसलिए सभी उपयोगकर्ता इससे लाभ उठा सकते हैं)। हालांकि, "जड़ वाले समाधान" पूरी तरह से मान्य हैं और साथ ही स्वागत करते हैं।


2
मैं इस धारणा के तहत था कि यह केवल सच था यदि आपने वैकलॉक को "गलत" तरीके से बनाया, उपयोग करके /sys/power/wake_lock, लेकिन अगर आपने इसे पावर मैनजर और पावरमैनगर का उपयोग करके "सही" तरीका किया। तो, सेवा दोनों वास्तविक वैकलॉक को पकड़ लेगी। और भले ही आपकी प्रक्रिया को मार दिया गया हो, इसे जारी करें ...
इज़काटा

1
मेरे द्वारा जुड़ी गई जानकारी के अनुसार, स्पष्ट रूप से ऐसा नहीं है। कोई व्यक्ति कर्नेल स्रोतों की जाँच कर रहा है, और कोई संकेत नहीं मिला है। डेवलपर्स के लिए संकेत: ऐसा लगता है कि "आंशिक वैकलॉक" का अनुरोध किया जा सकता है , इसलिए वे स्वचालित रूप से समाप्त हो जाएंगे जब टाइमर की अप और वैकलॉक एक्वायर ताज़ा नहीं हुई थी। आपके द्वारा संदर्भित "सुरक्षित तरीका" होना चाहिए।
इज़्ज़ी

जवाबों:


37

मैं कैसे बता सकता हूं कि मैं प्रभावित हूं?

यह शायद उन लोगों के लिए पहला सवाल है जो इस विषय से परिचित नहीं हैं। जिंजरब्रेड (Android 2.3) और इसके बाद के संस्करण में, आपको एक सेवा प्राप्त हुई है जो आपको यह पता लगाने में मदद करती है: बैटरी के आँकड़े। हालाँकि निर्माता इसे अलग-अलग बिंदुओं पर रखने की कोशिश करते हैं, यह ज्यादातर सेटिंग्स में पाया जाता है → फ़ोन के बारे में → बैटरी या इसी तरह, और उन ऐप्स की सूची दिखाता है जिनमें आपकी बैटरी का सबसे अधिक उपयोग किया जाता है। उसके ऊपर एक छोटा सा ग्राफ है। उस पर टैप करें, और यह आपको इसके समान स्क्रीन पर लाता है:

बैटरी आँकड़े
एंड्रॉइड 2.3 पर बैटरी के आंकड़ों का स्क्रीनशॉट

मैंने अपने एक डिवाइस से एक स्क्रीनशॉट चुना जो इस मुद्दे को दिखाता है। निचली दो नीली पट्टियों ("अक्तीव" = डिवाइस को जागृत (सक्रिय), "बल्डशर्म" "=" स्क्रीन पर ") को देखते हुए," अक्तीव "पर दायीं-सबसे नीली पट्टी एक वेकॉक को इंगित करती है - डिवाइस को इसके बावजूद व्यस्त रखा गया था। वास्तव में स्क्रीन को बंद कर दिया गया था। तो इसके द्वारा हम यह सुनिश्चित कर सकते हैं कि हमें एक WakeLock मिल गया है - लेकिन हम यह नहीं बता सकते कि इसका कारण कौन है।

यदि आपका डिवाइस इस स्क्रीन (या नीचे स्थित बार) की पेशकश नहीं करता है: मुझे अभी-अभी पता चला है जैसे एलजी ऑप्टिमस 4X पर चलने वाले एंड्रॉइड 4.0.3 ने इन बार को काट दिया है), तो आप उन्हें ढूँढ सकते हैं जैसे जीएसएम बैटरी मॉनिटर का उपयोग करना :

GSam बैटरी मॉनिटर
GSam बैटरी मॉनिटर से समान जानकारी - यहाँ उल्लेखित "नीली पट्टी" पीले / नारंगी हैं

वेकॉक के कारण क्या हुआ?

दुर्भाग्य से, इस प्रश्न का उत्तर पूर्व-स्थापित ऐप्स (केवल, कुछ कस्टम रोम को छोड़कर) का उपयोग करके नहीं दिया जा सकता है। लेकिन ऐसे उपकरण उपलब्ध हैं जो कर सकते हैं। इसके लिए सबसे अच्छा ज्ञात उम्मीदवार बेटरबैटस्टैट्स है , और इसके आंशिक वाकेलॉक्स अनुभाग में हमें इसका कारण बताता है :

BetterBatteryStats BetterBatteryStats2
बेटरबैटस्टैट से स्क्रीनशॉट

पहले उदाहरण 2 में (ऐप के प्लेस्टोर पेज से लिया गया), इस घटना के कारण अधिकांश WakeLocks एक वांछित था: हम नहीं चाहते हैं कि प्लेबैक संगीत को सुनते हुए बंद हो जाए। तो दूसरा उदाहरण 3 (मेरे उपकरणों में से एक पर वास्तविक मामले से लिया गया) बेहतर साबित हो सकता है: सर्वोच्च 3 घटनाएं बहुत ही ऐप के कारण होती हैं, जिन्हें IMAP पुश सेवा को सक्रिय रखने के लिए वेकॉक की आवश्यकता थी।

बेटरबैटस्टैट्स के विकल्प के लिए , उज़ुमप्स के उत्तर में उल्लिखित वैकलॉक डिटेक्टर ऐप देखें - जो विशेष रूप से गैर-तकनीकी के लिए संभालना आसान लगता है:

वैकलॉक डिटेक्टर: ऐप विवरण वैकलॉक डिटेक्टर: प्रक्रियाओं का चयन करें
वैकलॉक डिटेक्टर - विस्तार करने के लिए छवि पर क्लिक करें। (स्रोत: Google Play )

क्या किया जा सकता है?

यदि मामला पिछले अनुभाग में दूसरे उदाहरण के रूप में स्पष्ट है, तो कार्रवाई काफी स्पष्ट है - कम से कम मेरे मामले में: जब मेल आता है, तो मुझे तुरंत सूचित करने की आवश्यकता नहीं है; 30 मिनट की देरी बिल्कुल स्वीकार्य है। इसलिए मैं मेल ऐप में चला गया, निष्क्रिय IMAP पुश (यह भी देखें: पुश ईमेल ), और इसके बजाय 30min पोल अंतराल पर स्विच किया गया। WakeLocks पूरी तरह से गायब नहीं हुआ, लेकिन उल्लेखनीय रूप से गिरा - बैटरी जीवन में उल्लेखनीय सुधार हुआ।

तो फिर वहाँ सवाल में ही उल्लेख किया गया मामला है: एक बुरा व्यवहार एप्लिकेशन अपने WakeLock जारी नहीं। अपने निष्कर्षों के साथ देव का सामना करें और ठीक करने के लिए कहें। अगर वह उद्धार करता है: समस्या हल हो गई। यदि नहीं: लगभग हमेशा एक वैकल्पिक ऐप उपलब्ध है।

अगर यह एंड्रॉइड सिस्टम ही है तो क्या होगा?

हाँ, कभी-कभी ऐसा लगता है कि बस: कुछ Android सेवा द्वारा 98% या उससे अधिक की खपत। ओह, अगर यह 98% है, तो ज्यादातर मामलों में उम्मीदवार का नाम LocationManagerService है । बुरा आदमी हम पर जासूसी कर रहा है? जरुरी नहीं। इस विशेष मामले में, सूचीबद्ध "बुरा आदमी" भी दोषी नहीं है - कम से कम सीधे नहीं। यहाँ यह वर्तमान स्थान का अनुरोध करने वाला एक और ऐप है। इस बारे में Setera.org पर एक उत्कृष्ट लेख है: Android LocationManagerService बैटरी नाली को पिनपॉइंट करना । एक सार देने के लिए: यह एंड्रॉइड का उपयोग करता हैdumpsysसुविधा (रूट की आवश्यकता है) एक सिस्टम स्थिति को डंप करने के लिए, और आपको LocationManagerService के लिए स्थापित श्रोताओं की जांच करने की सुविधा देता है। उनके विन्यास पर एक करीब से नज़र रखता है जो स्थान की जानकारी के लिए इसे लगातार "हथौड़ा" कर रहे हैं (कुछ तो स्थायी रूप से करते हैं, यानी बिना ब्रेक के)। जैसा कि ऐप की आईडी के साथ सूचीबद्ध है, और डंप में एक और जगह पर भी एक साथ ऐप तकनीकी नाम के साथ, आप अभी भी इसे पहचान सकते हैं और उचित कार्रवाई कर सकते हैं।

और UFO के बारे में क्या?

दुर्भाग्य से, ऐसे हैं: एप्स जिन्होंने एक वेकॉक पंजीकृत किया - और फिर इसे जारी किए बिना बाहर निकल गए। क्या बचा है * अप्रयुक्त एफ *** आईएनजी Obsoletes * - WakeLocks बिना किसी उपयोग के लिए आयोजित किया जाता है। तो कोई तरीका नहीं है कि बस ऐप को अग्रभूमि में लाया जाए और फिर से कॉन्फ़िगर किया जाए, या इसे अपने WakeLocks को रिलीज़ किया जाए।

यहाँ मेरे लिए एकमात्र समाधान एक रिबूट है - और मैं एक बेहतर समाधान चाहता हूं। बेशक, यदि आप दोषी एप्लिकेशन को जानते हैं, तो इसके बारे में चरण ऊपर दिए गए समान हैं: देव को सूचित करें, एक फिक्स प्राप्त करें - या ऐप को बदलें। लेकिन वर्तमान वेकॉक से छुटकारा पाने के बारे में ? शायद कोई और रिबूट के लिए एक बेहतर विकल्प प्रदान कर सकता है?

क्या कुछ और पढ़ने की सिफारिश की गई है?

ज़रूर। अभी के लिए एक, मैं बाद में और जोड़ सकता हूं:


2
डेवलपर्स को यह कहने के लिए बेहतर शिक्षा ... "जब आप उनके साथ किए जाते हैं और खुद के बाद सफाई करते हैं तो वैकलॉक जारी करें"?
t0mm13b

3
मुझे अपने हमेशा-तेजस्वी जवाब के लिए अपवोट करें !!! आप कभी भी इससे ऊबते नहीं हैं? : D
t0mm13b

2
ज़रूर - लेकिन मेरा सवाल देखें: मैं स्पष्ट रूप से डेवलपर पक्ष के बारे में नहीं पूछ रहा हूं , लेकिन एक उपयोगकर्ता के दृष्टिकोण से । शायद मुझे इसे और अधिक स्पष्ट करने की आवश्यकता है;)
इज़्ज़

1
ऊब गए हैं? क्या कोई समझा सकता है कि ऐसा क्या है? XD नहीं, मेरे दिमाग में हमेशा कुछ न कुछ होता है। अगर मुझे लगता है कि यह काफी अच्छा है, तो मैं यहां भी इसके बारे में पूछता हूं (मेरी प्रोफ़ाइल देखें: मैं अक्सर नहीं पूछता), हालांकि मेरे पास एक (आंशिक) जवाब हो सकता है। प्रतिक्रिया यहाँ हमेशा अगर सवाल इसके लायक है :) ताज़ा है
इज़ी

1
कृपया कीजिए! और अपने निष्कर्षों की रिपोर्ट करें! मैं सिर्फ "अनाथ" WakeLocks के साथ समस्या का वर्णन किया था। एक घंटे के लिए चारों ओर घूमना, मुझे यह देखने से आगे नहीं मिला कि यह LocationManagerService था । सभी 0sec (sic!) अपडेट के लिए पंजीकृत Android सेटिंग (=: - 0) थी। मैंने इसे बाहर निकाल दिया, इसे रोक दिया, इसे कमांड लाइन पर मार दिया ... ताले से छुटकारा पाने का कोई तरीका नहीं। डब्ल्यूटीएफ ने क्या सेटिंग्स कीं ? एक रिबूट ने इसे हल किया, निश्चित रूप से - लेकिन क्या यह विंडोजफोन है हमें दिन में दो बार रिबूट करना होगा?
इज़ी

6

संक्षेप में, यह एक बहुत अच्छा सवाल है लेकिन मुझे डर है, यह एंड-यूज़र को जागरूक करने से कहीं अधिक वारंट है!

वेक-लॉक को खत्म करने के लिए कर्नेल को फिर से डिज़ाइन करें और सिद्धांत को बेहतर तरीके से प्रबंधित करने के लिए और अधिक कुशल तरीके का उपयोग करें जिससे बैटरी जीवन लंबा हो।

दुर्भाग्य से, इसे "शक्ति प्रबंधन" को सक्षम करने के लिए एक वास्तविक समाधान के रूप में स्वीकार किया गया है, इसके बावजूद यह बिल्कुल भी कुशल नहीं है! वैकलॉक (ग्रेग क्रोहा हार्टमैन के साथ - ड्राइवरों के विकास के लिए लिनक्स गुरु - सटीक लिंक के लिए गुग्लिंग हूं) के बारे में एक व्यापक चर्चा हुई, अन्य साइटें जैसे LWN.net और एक अन्य लेख यहां उसी साइट पर समझाया गया है । यह इस ब्लॉग के लिए संदर्भित ग्रेग क्रोहा हार्टमैन का लेख था , जिसमें वे राफेल जे। वायसोकी द्वारा प्रस्तावित वैकल्पिक समाधान से सहमत दिखाई देते हैं, उन्होंने संभावित विकल्प के बारे में बहुत कुछ दस्तावेज किया है। यकीन नहीं है कि अगर वास्तव में अधिक आधुनिक कर्नेल v3.xx में जगह है

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

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

हालांकि, अंतिम उपयोगकर्ता के लिए शब्दजाल इत्यादि के बारे में स्पष्ट रखने का प्रयास करते हुए, वास्तव में इस मुद्दे का मूल कर्नेल कोड में उबलता है कि कैसे वैकलॉक का प्रबंधन किया जाता है।

यहाँ XDA पर एक संक्षिप्त सारांश है कि क्या uninitiated के लिए wakelocks है। बेटरबैटस्टैट्स का उपयोग करके , कोई भी ठीक से देख सकता है कि कौन सी प्रक्रिया बैटरी को सूखा रही है, विकी को गीथूब पर होस्ट किया गया है, और यहां बाजार में उपलब्ध है


1
मज़ेदार आप उसी XDA धागे की ओर इशारा करते हैं जिसका मैंने उल्लेख किया था। मैं आपसे सहमत हूं कि सिस्टम को बेहतर देखभाल करनी चाहिए (उदाहरण के लिए एप द्वारा अनुरोध किए गए वेक्कलॉक्स जारी करके जो अब नहीं चल रहे हैं)। और डेवलपर्स को कोडिंग (जीवन चक्र के उपयुक्त राज्यों में स्पष्ट रूप से जारी करके) में बेहतर देखभाल करनी चाहिए। लेकिन यह हमें उपयोगकर्ताओं को जानने में मदद नहीं करता है । मुझे उम्मीद है कि मेरा जवाब उपयोगकर्ता क्या कर सकता है में कुछ अंतर्दृष्टि देता है - और आप में से एक "टेकीज़" बचे हुए अंतराल को भर सकता है!
इज़ी

3

Wakelock डिटेक्टर की जाँच करें : XDA- डेवलपर्स / Google Play :

Wakelock डिटेक्टर बेहतर नज़र के लिए एक विस्तार योग्य दृश्य में एप्लिकेशन के wakelocks समूहों। और यह दिखाता है कि कौन से ऐप चल रहे हैं। और ऐप के विस्तारित दृश्य में किल अनइंस्टॉल जानकारी बटन हैं।

वैकलॉक डिटेक्टर: ऐप विवरण वैकलॉक डिटेक्टर: प्रक्रियाओं का चयन करें
विस्तार करने के लिए छवि पर क्लिक करें। (स्रोत: Google Play )

प्रकटीकरण: मैं इस एप्लिकेशन के लिए जिम्मेदार डेवलपर में से एक हूं। चार और दोस्त मेरे साथ इस प्रोजेक्ट पर एक शौक के रूप में काम कर रहे हैं।


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

विवरण के लिए धन्यवाद! मैंने उन्हें आपके उत्तर में मिला दिया, मुझे आशा है कि आपको कोई आपत्ति नहीं है :) समझ का प्रश्न: एक ऐप "सेकंड" के अंतराल का उपयोग करके स्थान पर प्रश्न करता है। यह डिवाइस को वेकेलॉक करने के लिए LocationService का कारण होगा । क्या वेक लॉक डिटेक्टर असली कारण के रूप में जिम्मेदार ऐप दिखाएगा - या लोकेशन सर्विस , क्योंकि यह उस ऐप पैकेज का हिस्सा नहीं है?
इज़्ज़

आपके प्रश्न का उत्तर 'नहीं' है क्योंकि wakelock डिटेक्टर समूह wakelocks है जो एक ही ऐप packagename से संबंधित हैं। जैसा कि स्थान सेवा Android ओएस से संबंधित है, समाधान ऐप की उपयोगकर्ता अनुमतियों की जाँच कर रहा होगा
UzumApps

आपका बहुत बहुत धन्यवाद! मैं एक आसान समाधान के लिए उम्मीद कर रहा था "क्या होगा अगर यह खुद एंड्रॉइड सिस्टम है?" अंश। लगता है कि ऐसी बात नहीं है - लेकिन अगर यह संभव है, यह एक अच्छा विचार हो सकता है WLD साथ :) एकीकृत करने के लिए
इज़ी

2
आपकी राय के लिए धन्यवाद, मैं इस पर विचार करूंगा और उस पर काम करूंगा। WLD अच्छा लग रहा है !!! :)
उज़ुमैप्स

1

कुछ तरीके जो बिना उपकरण वाले उपयोगकर्ताओं को मदद करेंगे

  1. यह देखते हुए कि @Uzumapps, ऐप के डेवलपर्स में से एक ने Wakelock Detector ( WLD ) का उपयोग करके एक समाधान पोस्ट किया है , मुझे आश्चर्य है कि उसने ऐप का उपयोग करने के बारे में अपडेट नहीं किया है जिसे Wakelock Detector Light नामक रूट के बिना भी उपयोग किया जा सकता है ! मैंने अपने नए डिवाइस के लिए एक समाधान की खोज की है (अनियंत्रित)।

यह एक हालिया विकास है और इसलिए इसे बिना डिवाइस वाले उपयोगकर्ताओं के लिए पोस्ट किया जा रहा है। Moto X Play (Android 6.0.1) पर काम करने के रूप में परीक्षण किया गया

  • ऊपर प्ले स्टोर लिंक से WLD डाउनलोड करें

  • यहां डब्ल्यूएलडी का उपयोग करने के लिए मैनुअल

  • यहां गैर निहित उपकरणों के लिए निर्देश । इसमें सभी विवरण हैं लेकिन संक्षेप में:

    adb शेल डंप्स पॉवर | grep- आई आंशिक_वेक_लॉक

नोट: मुझे दूसरी विधि काम नहीं आ रही है, यह मेरे जैसे गैर-समझदार लोगों के लिए काम करने में संपादन समाधान का स्वागत करेगी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.