2011-05-22 17 views
5

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

यदि मैं वाकेलॉक का उपयोग नहीं करता, तो क्या मैं सुनिश्चित कर सकता हूं कि डिवाइस नींद मोड में नहीं जाएगा जब तक कि मेरी सेवा की मंशा कतार खाली न हो (और इसलिए सेवा बंद हो जाती है)? (मान लीजिए प्रसंस्करण में काफी समय लग सकता है)।

यदि वेक लॉक की आवश्यकता है, तो मुझे कहां और कब इसे बनाना चाहिए और इसे कब प्राप्त करना चाहिए, और मुझे इसे कब जारी करना चाहिए? सेवा के इरादे की कतार खाली होने के बाद मैं तुरंत WakeLock को रिलीज़ करना चाहता हूं।

अग्रिम

उत्तर

2

में धन्यवाद उपकरण को सक्रिय काफी देर तक आशय कतार के माध्यम से प्राप्त करने के लिए रहने के लिए गारंटी नहीं है।

mWakeLock.acquire(); // mWakeLock should be set to be reference counted 

// (do work) 

mWakeLock.acquire(1000); // hopefully long enough to get to the next item 
mWakeLock.release(); 
+4

@smsrecv:: यदि यह वास्तव में महत्वपूर्ण है कि आप को उद्देश्य तुरंत संभाल है, आपका सर्वश्रेष्ठ दांव अपने onHandleIntent में कुछ इस तरह करना है https: // GitHub मैं 'WakefulIntentService' में इस पैटर्न की समाप्ति है। com/commonsguy/cwac-wakeful – CommonsWare

+0

संदर्भ-गणना 'वेक लॉक' के साथ, आपको 'अधिग्रहण (1000) 'चाल करने की आवश्यकता नहीं है। – CommonsWare

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