2012-09-18 17 views
6

मैं एक छोटा उपयोगिता ऐप विकसित कर रहा हूं जो 2 डी बारकोड स्कैन करता है, और उसके बाद प्रत्येक बारकोड को एक IntentService पर सबमिट करता है जहां एक लंबा कार्य किया जाता है।क्या एकाधिक वेक ताले पकड़ना संभव है?

जब गतिविधि दिखाई जाती है, तो उसे डिवाइस में बारकोड संसाधित होने तक डिवाइस को सोने से रोकना चाहिए। यदि सेवा प्रसंस्करण को समाप्त करती है, तो यह स्वयं बंद हो जाती है, लेकिन गतिविधि अभी भी दिखाई देनी चाहिए।

मैं गतिविधि जीवन चक्र के दौरान एक SCREEN_DIM_WAKE_LOCK वेक लॉक पकड़ना चाहता हूं, लेकिन इस प्रकार से CPU को सोने से रोका नहीं जाता है, इसलिए मुझे एक नया 2 डी कोड स्कैन होने पर गतिविधि में PARTIAL_WAKE_LOCK प्राप्त करने की भी आवश्यकता होगी , और संसाधित होने के बाद इसे मंशा सेवा में छोड़ दें।

SCREEN_DIM_WAKE_LOCK उद्देश्य उपयोगकर्ता को जागने के लिए प्रत्येक कुछ सेकंड में पावर बटन को दबाए रखने और एक नया बारकोड पढ़ने में सक्षम होने के लिए उपयोगकर्ता को टालने की असुविधा से बचने के लिए है। उपयोगकर्ता को एक दूसरे के बाद कोडों की एक बड़ी संख्या पढ़नी होगी और छोटी अंतराल के लिए भी गतिविधि होनी चाहिए जहां कोई उपयोगकर्ता इंटरैक्शन नहीं है।

मुझे एंड्रॉइड में पता है कि ऐप की शीर्ष 100% गारंटी, बंद नहीं है, या कई स्थितियों के कारण अग्रभूमि है, जहां तक ​​मेरा ऐप नियंत्रित नहीं हो सकता है, लेकिन मैं जहां तक ​​कर सकता हूं वहां जाना चाहूंगा।

तो एकाधिक वेक लॉक पकड़ना संभव है? गतिविधि और सेवा दोनों से उन्हें कहां से घोषित किया जा सकता है? (सिंगलटन, विस्तार का आवेदन?)

उत्तर

9

एकाधिक वेक लॉक पकड़ना संभव है। असल में यह तब होता है जब स्क्रीन बंद होने पर एक ही समय में एकाधिक एप्लिकेशन सिंक हो जाते हैं। (कल्पना करें कि स्क्रीन पर लॉक होने पर आपके जीमेल और फेसबुक ऐप्स एक ही समय में सिंक हो जाते हैं। वे नहीं जानते कि एक-दूसरे के पास अलग-अलग वेक लॉक होंगे। मई या विभिन्न प्रकार के वेक लॉक नहीं हो सकते हैं)

एंड्रॉइड सुनिश्चित करेगा कि हर कोई उम्मीदें पूरी की जाती हैं (दूसरे शब्दों में अधिकतम बैटरी नाली।)

मेरी राय में, मुझे लगता है कि आप इस तथ्य को अधिक सोच रहे हैं कि आपको एक SCREEN_DIM_WAKE_LOCK की आवश्यकता है क्योंकि यह गलती से बैटरी की बहुत सारी निकासी कर सकती है, लेकिन मैं गलत हो सकता हूं आपके उपयोग के मामले के आधार पर।

तो संक्षिप्त उत्तर हाँ है। आप कई वेक लॉक पकड़ सकते हैं और एंड्रॉइड अपेक्षित कार्य करेगा (चाहिए)। ध्यान में रखने के लिए केवल एक चीज यह है कि आप दोनों Wakelocks ठीक से जारी करते हैं।

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

आशा है कि यह मदद करता है।

+0

+1। लेकिन मैं 'ऑनस्टॉप' में स्क्रीन वेक लॉक जारी कर रहा हूं, क्योंकि जब मैं एक संवाद दबाता हूं तो मैं इसे सोना नहीं चाहता। –

+0

मुझे लगता है कि जब एक संवाद सामने आता है, तो आप बार कोड स्कैन नहीं कर रहे हैं, क्योंकि उपयोगकर्ता को संवाद का जवाब देना पड़ता है, क्या सिस्टम को नींद देना ठीक नहीं है, अगर उपयोग का जवाब नहीं देता है समय में संवाद? – Madushan

+0

हां, ठीक है यह सब इस बात पर निर्भर करता है कि नींद टाइमर कितना समय लेता है। अगर इसमें 3 सेकंड लगते हैं, तो बिजली बटन को धक्का देना परेशान है। यदि इसमें अधिक समय लगता है, तो मैं इसके साथ ठीक हूं। काम के भार के आधार पर, मैं स्क्रीन मंद लॉक भी डंप कर सकता हूं। –

संबंधित मुद्दे