मैं एक ऐप लिख रहा हूं जो लगातार डिवाइस के सेंसर को चुनाव करता है और हर बार फाइल को कुछ आंकड़े लिखना चाहिए। यह एक बार एक बार या एक मिनट में एक बार धीमा हो सकता है। क्या मुझे Handler's
postDelayed()
विधि का उपयोग करना चाहिए या बस इसे AlarmManager
के साथ शेड्यूल करना चाहिए?क्या मुझे अलार्ममेनगर या हैंडलर का उपयोग करना चाहिए?
उत्तर
मैं कहूंगा कि यह मतदान अंतराल पर निर्भर करता है। मुझे लगता है कि यह आपके मामले में काफी कम है (लगभग कुछ सेकेंड), इसलिए आपको हैंडलर रास्ता या टाइमर क्लास का उपयोग करके जाना चाहिए।
अलार्ममेनर एक उच्च स्तर की सेवा है और इसमें इस उपयोग के मामले को संभालने के लिए एक बड़ा ओवरहेड शामिल है। जब अलार्म ट्रिगर होता है, तो आपको इसे ब्रॉडकास्ट रिसीवर के साथ संभालना होगा। इसका मतलब यह है कि हर बार जब आप इनमें से किसी एक अलार्म को संभालते हैं, तो आपको उन सेंसर के लिए श्रोताओं को पंजीकृत करने की आवश्यकता होती है, जिनमें आप रुचि रखते हैं, जो बेहद अक्षम है।
यदि ऐप को स्टैंडबाय में काम करना चाहिए तो AlarmManager
। यदि नहीं तो Handler
।
AlarmManager
सीपीयू जगाएगा इसलिए यह बैटरी को और अधिक निकाल देगा, जबकि Handler
स्टैंडबाय पर काम नहीं करेगा।
फ़ोन कब नींद मोड में जाता है? मैं थोड़ी देर के लिए अपने ऐप का परीक्षण कर रहा हूं और डिवाइस स्टैंडबाय में जा रहा है कभी भी कोई मुद्दा नहीं रहा है। –
मुझे अभी और अधिक विस्तृत उत्तर मिला है: http://stackoverflow.com/a/5120225/538169 – pawelzieba
तय करें कि आपके डिजाइन नीचे दिए गए महत्वपूर्ण बिंदुओं पर आधारित:
AlarmManager: लाभ AlarmManager
साथ यह काम करता है कि भले ही डिवाइस (सीपीयू बंद है) गहरी नींद मोड में है है। जब अलार्म आग लगती है, तो यह BroadcastReceiver
और onReceive
में हिट करता है, यह जागने के लॉक को प्राप्त करता है (यदि आपने WAKEUP
RTC_WAKEUP
या ELAPSED_TIME_WAKEUP
जैसे अलार्म के प्रकारों का उपयोग किया है)। onReceive()
को खत्म करने के बाद यह जाग ताला जारी करता है।
लेकिन ज्यादातर बार यह मेरे लिए काम नहीं करता था। इसलिए मैंने onReceive()
में अपने स्वयं के जागने वाले ताले हासिल कर लिए हैं और यह सुनिश्चित करने के लिए अंत में उन्हें जारी किया है कि मुझे वास्तव में सीपीयू मिल जाए।
कारण यह काम नहीं करता है कि जब कई अनुप्रयोग एक साथ संसाधन का उपयोग करते हैं (जैसे जागने वाले ताले जो सिस्टम को निलंबित करने से रोकते हैं), तो फ्रेमवर्क उन अनुप्रयोगों में सीपीयू खपत फैलता है, हालांकि आवश्यक रूप से समान नहीं है। इसलिए, यदि यह महत्वपूर्ण है, तो जागने वाले ताले हासिल करना और सामान करना हमेशा बेहतर होता है।
टाइमर और हैंडलर: Handler
और टाइमर गहरी नींद मोड में काम नहीं करते काम अर्थ/runnable जब डिवाइस सो है अनुसूची के अनुसार नहीं चलेंगे। वे नींद में समय की गणना नहीं करते हैं जिसका मतलब है कि कार्य निष्पादित करने में देरी की गणना केवल सक्रिय मोड के दौरान की जाएगी। इसलिए, वास्तविक देरी देरी से दी जाएगी + समय-व्यतीत-गहरी नींद में।
इससे आपको Handler
और AlarmManager
के बीच भेदभाव करने में मदद करनी चाहिए। [source]
हालांकि यह अधिकतर एपीआई 23 के लिए काम करने पर सहमत है। यह एक नई रिलीज है।
- 1. क्या मुझे इवेंट हैंडलर संलग्न करने के लिए .on() या .click() का उपयोग करना चाहिए?
- 2. मुझे क्या gacutil.exe का उपयोग करना चाहिए?
- 3. क्या मुझे बूटस्ट्रैप का उपयोग करना चाहिए?
- 4. एचटीएमएल। क्या मुझे सीडीएटीए का उपयोग करना चाहिए या HTML
- 5. क्या मुझे फ़्लैश या फ्लेक्स का उपयोग करना चाहिए?
- 6. क्या मुझे टेक्स्ट फ़ाइल या डेटाबेस का उपयोग करना चाहिए?
- 7. क्या मुझे डबल या फ्लोट का उपयोग करना चाहिए?
- 8. क्या मुझे eval() या call_user_func() का उपयोग करना चाहिए?
- 9. क्या मुझे AppDomain.CurrentDomain.BaseDirectory या System.Environment.CurrentDirectory का उपयोग करना चाहिए?
- 10. जीयूआई। क्या मुझे एसडब्ल्यूटी या जीडब्ल्यूटी का उपयोग करना चाहिए?
- 11. क्या मुझे प्रोटोटाइप का उपयोग करना चाहिए या नहीं?
- 12. क्या मुझे डेटा.फ्रेम या मैट्रिक्स का उपयोग करना चाहिए?
- 13. क्या मुझे scipy.pi, numpy.pi, या math.pi का उपयोग करना चाहिए?
- 14. क्या मुझे स्लीप() का उपयोग करना चाहिए या बस उन्हें
- 15. क्या मुझे फोबोस या टैंगो का उपयोग करना चाहिए?
- 16. क्या मुझे WPF कनवर्टर या ट्रिगर का उपयोग करना चाहिए?
- 17. क्या मुझे एम या पीएक्स का उपयोग करना चाहिए?
- 18. क्या मुझे int या UInt16 का उपयोग करना चाहिए?
- 19. क्या मुझे इंटरफ़ेस निर्माता का उपयोग करना चाहिए या नहीं?
- 20. शेयरपॉइंट: क्या मुझे सूचियों या डेटाबेस का उपयोग करना चाहिए?
- 21. क्या मुझे श्रोता या पर्यवेक्षक का उपयोग करना चाहिए?
- 22. क्या मुझे विरासत या संरचना का उपयोग करना चाहिए?
- 23. क्या मुझे HttpRuntime.Cache का उपयोग करना चाहिए?
- 24. क्या मुझे jQuery.inArray() का उपयोग करना चाहिए?
- 25. क्या मुझे jQuery.each() का उपयोग करना चाहिए?
- 26. क्या मुझे गिट स्थिति का विश्लेषण करना चाहिए या गिटारप का उपयोग करना चाहिए?
- 27. क्या मुझे AlarmManager के साथ लंबित INTent.getService() या getBroadcast का उपयोग करना चाहिए?
- 28. मुझे क्या करना चाहिए?
- 29. क्या मुझे आईपैयर या लूप के लिए उपयोग करना चाहिए
- 30. क्या मुझे System.out.println() या कुछ और उपयोग करना चाहिए?
मैं टाइमर प्रलेखन जाँच की है, इसका क्या मतलब है के लिए एक टाइमर एक डेमॉन धागे के रूप चलाने के लिए? क्या यह एक सेवा है? –