2012-08-15 16 views
11

मैं रीयल-टाइम निगरानी कार्यों के साथ एक एंड्रॉइड एप्लिकेशन बनाना चाहता हूं। ऑडियो प्रवाह का ऑडिट करने के लिए एक निगरानी कार्य है। दूसरा कार्य परिधीय सेंसर से बातचीत करना है। इन निगरानी कार्यों को दूसरों द्वारा ट्रिगर किया जा सकता है। इसके अलावा, बिजली की खपत को बचाने के लिए, ऑडियो फ़ंक्शन एक मतदान मोड में चल रहा है, यानी कुछ निश्चित समय के लिए सोएं और कुछ निश्चित समय के लिए जागें।एंड्रॉइड मॉनिटरिंग ऐप्स

मैं एंड्रॉइड एप्लिकेशन को डिज़ाइन करने के तरीके पर विचार कर रहा हूं।

  • क्या ऑडियो फ़ंक्शन को सेवा या गतिविधि के रूप में डिज़ाइन करना है या नहीं? समस्या यह है कि अगर इसे एक गतिविधि के रूप में डिज़ाइन किया गया है, तो समय के बाद स्क्रीन बंद होने पर ऑडियो फ़ंक्शन बंद हो जाएगा।

  • मतदान कार्य कैसे डिजाइन करें? टाइमर के साथ अलार्ममेनगर या आंतरिक-थ्रेड का उपयोग करें?

मेरा लक्ष्य जितना संभव हो सके बिजली की खपत को बचाने के लिए है। धन्यवाद।

+0

"ऑडियो प्रवाह का ऑडिट" क्या है? – CommonsWare

+0

ऑडियो बफर प्रवाह पढ़ने और डेसिबल स्तर का ऑडिट करने और लॉग बनाने के लिए ऑडियो रिकॉर्ड का उपयोग करें। धन्यवाद। – babysnow

उत्तर

1

मैं निम्नलिखित

एक) एक सेवा का उपयोग की सिफारिश करेंगे। गतिविधि अल्पकालिक इकाई है (यह केवल स्क्रीन पर होने पर ही काम करती है)

बी) सेवा अग्रभूमि बनाएं (इसे पढ़ें: http://developer.android.com/reference/android/app/Service.html#startForeground(int, android.app.Notification)। इससे यह संभावना कम हो जाएगी कि सिस्टम आपकी सेवा को मार देगा

सी) सेवा में, थ्रेड शुरू करें और थ्रेड में जो कुछ भी आपको चाहिए उसे करें।

डी) यदि आप समय-समय पर निष्पादित करना चाहते हैं, तो थ्रेड में थ्रेड.sleep() करें (जब थ्रेड सोता है तो यह CPU चक्रों का उपभोग नहीं करता है)।

मुझे विश्वास है सी) और डी) अलार्ममेनगर के लिए बेहतर है। यहां प्रलेखन (http://developer.android.com/reference/android/app/AlarmManager.html) से टुकड़ा है: "नोट: अलार्म प्रबंधक उन मामलों के लिए है जहां आप अपना एप्लिकेशन कोड एक विशिष्ट पर चलाना चाहते हैं समय, भले ही आपका एप्लिकेशन वर्तमान में चल रहा न हो। सामान्य समय के संचालन (टिक, टाइमआउट, आदि) के लिए हैंडलर का उपयोग करना आसान और अधिक कुशल है। "

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

1

विक्टर के साथ Concurring, तो आप निश्चित रूप से एक सेवा का उपयोग करने, और startForeground()

फोन करके स्मृति में पिन हालांकि मैं सुझाव है कि आप प्रणाली Handler में बनाया का उपयोग पर विचार करना चाहते हैं; अपनी कार्यक्षमता को Runnable में रखें और mhandler.postDelayed(myRunnable, <some point in future>) पर कॉल करें; यह एंड्रॉइड ढांचे को अधिकांश बिजली प्रबंधन करने की अनुमति देगा।

0

यह एक सेवा है।

और आप कुछ अतिरिक्त मजबूती चाहते हैं: सेवा को मार दिया जा सकता है और बाद में पुनरारंभ नहीं किया गया, यहां तक ​​कि एक अग्रभूमि सेवा भी हो रही है। इससे आपकी निगरानी बंद हो जाएगी।

यूआई से अपनी सेवा शुरू करें। यदि आप डिवाइस रीबूट से बचने के लिए सेवा चाहते हैं, तो इसे एंड्रॉइड.intent.action.BOOT_COMPLETED के लिए ब्रॉडकास्ट रिसीवर से भी शुरू करें।

अन्य उत्तरों में वर्णित अनुसार सेवा में एक थ्रेड बनाएं।

इसके अतिरिक्त, समय-समय पर अपनी सेवा शुरू करने के लिए अलार्म प्रबंधक का उपयोग करें। एकाधिक startService() कॉल ठीक हैं। यदि पहले से चल रहा है, तो सेवा चलती रहेगी। लेकिन अगर सिस्टम द्वारा इसे भुला दिया गया है, तो कहें, कम संसाधन स्थितियों की एक श्रृंखला के बाद, इसे अभी पुनरारंभ किया जाएगा।

जिम्मेदार रूप से उन अलार्म को शेड्यूल करें: एक अच्छा नागरिक बनने के लिए, बिल्कुल न्यूनतम आवृत्ति सेट करें। आखिरकार, एंड्रॉइड के पास सेवा को मारने के कुछ अच्छे कारण थे।

कुछ सेवाओं के साथ, और भी कदमों की आवश्यकता हो सकती है, लेकिन इस मामले में यह दृष्टिकोण पर्याप्त प्रतीत होता है।

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