मैं एक ऐप बना रहा हूं जो नियमित अंतराल पर बैटरी स्थिति, वाईफ़ाई कनेक्शन और स्थान डेटा की निगरानी करेगा और परिणाम को एक फ़ाइल में लिख देगा (और बाद में उन्हें सर्वर पर भेज देगा)। ऐप निगरानी स्थापित करने पर अक्षम होना चाहिए - लेकिन इसे सक्षम करने वाला उपयोगकर्ता रीबूट से बचना चाहिए। बहुत सारे पढ़ने के बाद मुझे एहसास हुआ है कि मेरे पास मूल रूप से 2 विकल्प हैं:एंड्रॉइड डिज़ाइन: पृष्ठभूमि लंबी चल रही सेवा या अलार्ममेनगर?
- सबक्लास
Service
और मेरी गतिविधि से इसे बंद कर दें। इसे अग्रभूमि पर सेट करें, स्टिकी और क्या नहीं और उम्मीद है कि यह एंड्रॉइड द्वारा नहीं मारा गया है - और अगर एंड्रॉइड इसे पुन: प्रयास करता है तो सावधानी बरतें (वास्तव में वहां 3 सेवाएं होनी चाहिए ताकि उनके बीच समन्वय गड़बड़ हो)। सेवा में एक धागा शुरू करें (मुझे लगता है कि निष्पादकों के लिए कोई ज़रूरत नहीं है) और इसेThread.sleep(REGULAR_INTERVAL)
है। उठो, डेटा इकट्ठा करें उन्हें एक फाइल में लिखें। संग्रहित जानकारी को प्रसारित करें और इसे चलाने पर होने पर मेरी गतिविधि पर प्रदर्शित करें (जो ब्रॉडकास्ट रिसीवर पंजीकृत होगा)। कुल्ला औरwhile(true)
दोहराना। इस - को बाधित करने का कोई तरीका है मेरी गतिविधि AlarmManager के साथ एक लंबित इंटेंन्टेंट पंजीकृत करें - जो प्रत्येक REGULAR_INTERVAL चलाएगी। मैंने इस दृष्टिकोण के तकनीकी विवरणों में बहुत कुछ नहीं देखा है - लेकिन मुझे आशा है कि मैं इस लंबित इंटेंट को बनाने और एक इंटेंट सेवा चलाने में सक्षम हो जाऊंगा (ऐसा लगता है कि यह थ्रेड मशीनरी मुफ्त में बंद हो रहा है और साथ ही बंद हो रहा है अपने दम पर)। इस दृष्टिकोण के लिए कुछ कंकाल कोड का स्वागत किया जाएगा।
मुझे लगता है कि मुझे दोनों मामलों में साझा प्राथमिकताएं (पहले से ही यह कर चुके हैं) की जांच करने के लिए बूट रिसीवर पंजीकृत करना है और यदि 1 सेवा में शुरू होता है तो 2 मामले में अलार्म ईवेंट के लिए रिसीवर पंजीकृत करते हैं और अलार्म मैनेजर सेट अप करें - यही वह हिस्सा है जिसे मुझे कुछ कंकाल कोड चाहिए।
तो - इससे पहले कि मैं इसे बनाना शुरू कर दूं - जो पसंदीदा दृष्टिकोण होगा?
रिकैप में - ऐप को कुछ फोन गुणों की निगरानी करनी चाहिए और उन्हें तब तक फ़ाइल में लिखना चाहिए जब तक उपयोगकर्ता इसे बंद करने का विकल्प नहीं चुनता।
आपके उपयोगकर्ताओं को शायद तुम्हें मार देंगे देखना चाहिए अगर आप सिर्फ निश्चित समय अंतराल पर गुंबद डेटा इकट्ठा करने के लिए एक 'Service' जिंदा लगातार draining उनके फोन की बैटरी रखने के लिए। यदि आवश्यक हो तो अतिरिक्त WakeLocks के साथ 'IntentService' के साथ दूसरे दृष्टिकोण का उपयोग करें (CommonsWare की 'WakefullIntentService' पर एक नज़र डालें)। – Luksprog
@ लक्सप्रोग: धन्यवाद - क्या मुझे ताले की आवश्यकता होगी? प्रसारण रिसीवर में जो अलार्म प्राप्त करेगा (अभी भी यह देख रहा है कि इसे वास्तव में कैसे कार्यान्वित किया जाना चाहिए)? –
नकारात्मक वोट क्यों? –