2010-11-23 16 views
7

मैं वेकलोक की धारणा के लिए नया हूं और आपकी मदद की ज़रूरत है।शुरुआती प्रश्न: वाकेलॉक्स

सवाल:

  1. मुझे लगता है Wakelock ताला किसी प्रकार की जो जब क्रियान्वित कोड द्वारा आयोजित नींद से डिवाइस से बचाता है किया जाना है। क्या होगा यदि डिवाइस पहले से ही नींद/स्टैंडबाय मोड में है, तो क्या कोड निष्पादित होगा? मान लीजिए कि यह कभी भी वेक लॉक हासिल नहीं करेगा?

  2. जब पृष्ठभूमि थ्रेड (AsyncTask) में एक लंबे समय तक चलने वाला कार्य (7-8 सेकंड) किया जाता है तो मुझे वेक लॉक रखने के बारे में परेशान होना चाहिए? AsyncTask पहले से ही मेरे लिए यह अधिग्रहण करता है?

  3. आधिकारिक दस्तावेजों और Wakelocks पर लेखन के लिए लिंक की सराहना की जाती है।

धन्यवाद।

+0

मैं यह भी जानना चाहूंगा। विशेष रूप से, फोन किस नींद में सो जाता है? अगर फोन जाग रहा है, तो मैं निरंतर गतिविधि शुरू करता हूं (मेरे मामले में एक फाइल अपलोड कर रहा है), क्या मेरी प्रक्रिया काम करते समय फ़ोन सो जाएगा? – Timmmm

उत्तर

4

1. अगर फोन एक पूर्ण आने वाली फोन कॉल से अलग नींद मोड में है, तो आप फ़ोन को उठाने के लिए अलार्ममेनर इरादे का उपयोग कर सकते हैं।

AlarmManager वर्ग प्रलेखन से

:

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

2. यदि आप एक AsyncTask के साथ काम कर रहे हैं, आप AsyncTask प्रलेखन से onPostExecute()

पर यूआई धागा करने पर परिणाम प्रकाशित करना चाहते हैं जाएगा:

AsyncTask उचित और आसान सक्षम बनाता है यूआई थ्रेड का उपयोग करें। यह वर्ग थ्रेड और/या हैंडलर का उपयोग किए बिना यूआई थ्रेड पर पृष्ठभूमि संचालन करने और परिणामों को प्रकाशित करने की अनुमति देता है।

3. मेरा सुझाव है कि आपने Power Manager के आधिकारिक दस्तावेज़ीकरण में पढ़ा है जो वेक लॉक अवधारणा के लिए एक अच्छा परिचय देता है।

3
  1. आमतौर पर केवल कोड है कि जब फोन सो रही है चल पाएंगे एक BroadcastReceiver है। असल में, फोन एक सेकंड के लिए उठता है, BroadcastReceiver के कोड चलाता है और फिर सो जाता है। चूंकि आपको BroadcastReceiver में कभी भी लंबे कोड को नहीं चलाया जाना चाहिए (इसके बजाय Service लॉन्च करने के लिए इसका उपयोग करें), आप मूल रूप से मान सकते हैं कि फ़ोन सोते समय आपका कोड कभी नहीं चलाया जाता है। बेशक, यदि आप Service शुरू करने के लिए BroadcastReceiver का उपयोग कर रहे हैं, तो आपको आमतौर पर वेक लॉक प्राप्त करना चाहिए।

  2. उपयोगकर्ता द्वारा शुरू की गई AsyncTask के साथ, आपको वास्तव में वेक लॉक्स के बारे में चिंता करने की आवश्यकता नहीं है। यह चल रहा है जब फोन सो जाएगा। मुझे यकीन नहीं है कि वे एक वेक लॉक प्राप्त करते हैं, लेकिन मानक AsyncTask चलाते समय मेरे फोन को सोने के लिए डालने से यह बाधित नहीं होता है।

  3. के रूप में sted ने कहा, यह बाहर की जाँच: http://developer.android.com/reference/android/os/PowerManager.html

मूल रूप से केवल समय आप wakelocks के बारे में चिंता करने की जरूरत है जब आप या तो उम्मीद अपने कार्य सो (जैसे कि तुम मामला है के द्वारा बाधित किया जा रहा है एक अलार्म सेट करें जो फोन को संक्षेप में जगाता है) या यदि आप निरपेक्ष कार्य को बाधित नहीं कर सकते हैं। अन्यथा, बस सुनिश्चित करें कि आप किसी भी बाधाओं को गहन रूप से संभाल लें।

+0

मेरे परीक्षण से पता चला है कि आप एक सेवा को ट्रिगर करने के लिए अलार्म का उपयोग कर सकते हैं, इसलिए आपको प्रसारण रिसीवर की आवश्यकता नहीं है। अगर कोई इसके बारे में गलत है तो कृपया मुझे सही करें (शायद यह केवल ओएस के कुछ संस्करणों पर काम करता है)। इस बीच, सेवाओं पर चर्चा के लिए https://github.com/commonsguy/cwac-wakeful#readme देखें जो डिवाइस को तब तक जागृत रखे जब तक कि वे अपना कार्य पूरा नहीं कर लेते। –

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