2011-11-16 4 views
8

Android के AlarmManager जावाडोक राज्योंAlarmManager के सक्रिय करने वाले लॉक जब एंड्रॉयड के साथ आपूर्ति एपीआई क़ौम जिसमें AlarmService प्रदर्शित में एक सेवा

When an alarm goes off, the Intent that had been registered for it is broadcast by the system,

वहाँ एक AlarmService (पैकेज com.example.android.apis.app) है शुरू करने उपयोग।

यह हम (स्पष्टता के लिए संपादित) निम्नलिखित है:

PendingIntent mAlarmSender = PendingIntent.getService(AlarmService.this, 
      0, new Intent(AlarmService.this, AlarmService_Service.class), 0); 
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 30*1000, mAlarmSender); 

तो इस उदाहरण में यह एक PendingIntent mAlarmSender = PendingIntent.getBroadcast(...); नहीं करता है बजाय इसे एक getService जो जावाडोक की ओर संकेत कभी नहीं करता है।

कारण मैं इसके बारे में पूछ रहा हूं क्योंकि सीपीयू वेक लॉक के प्रभावों के कारण है। जावाडोक का कहना है कि ब्रॉडकास्ट रिसीवर के onReceive() रिटर्न के बाद अलार्ममेनर का वेक लॉक जारी किया जाएगा।

मैं क्या सोच रहा हूं कि यदि आप उदाहरण में अलार्म का उपयोग करते हैं तो वेक लॉक प्रभाव क्या हैं? जावाडोक इसे संबोधित नहीं कर रहा है। अगर ऐसा लगता है कि अलार्म सेट करते समय आपको प्रसारण तकनीक का उपयोग करना चाहिए।

उत्तर

6

मैं क्या सोच रहा हूं कि अगर आप उदाहरण में अलार्म का उपयोग करते हैं तो वेक लॉक प्रभाव क्या हैं?

डिवाइस की नींद से पहले आपकी सेवा नियंत्रण प्राप्त करने की कोई गारंटी नहीं है।

यदि कुछ ऐसा लगता है कि आपको अलार्म सेट करते समय प्रसारण तकनीक का उपयोग करना चाहिए।

_WAKEUP के लिए अलार्म, हाँ, यह है कि केवल रास्ता है जिसमें हम उपकरण अभी भी जाग रही है, जबकि नियंत्रण प्राप्त करने के लिए गारंटी दी जाती है के रूप में।

के बाद से काम _WAKEUP अलार्म के द्वारा किया जा करने के लिए आम तौर पर क्या आप सुरक्षित रूप से की onReceive() में कर सकते हैं के दायरे से बाहर है एक प्रकट-पंजीकृत BroadcastReceiver, एक आम पैटर्न एक IntentService को काम सौंपने के लिए है। इसके लिए, मैंने WakefulIntentService को IntentService पर सुरक्षित रूप से पास करने के लिए पैटर्न को लागू करने के लिए पैकेज को कार्यान्वित किया है और डिवाइस को अपने काम करने के लिए पर्याप्त समय तक जागृत रखना है।

+0

सही उत्तर - महान लगाव। बहुत धन्यवाद – Tim

+0

भी .. WakefulIntentService को रद्द करने का सबसे अच्छा तरीका क्या है? – Tim

+0

@ टिम: मुझे यकीन नहीं है कि "WakefulIntentService को रद्द करें" से आपका क्या मतलब है। आप 'अलार्ममेनगर' पर 'रद्द() 'के माध्यम से अलार्म को रद्द कर सकते हैं। – CommonsWare

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