2011-04-18 24 views
11

मैं अलार्म शुरू करने से बचने के लिए कूड़े हुप्स कूद रहा हूं (ठीक है, यह जटिल नहीं है)। मूल कोड इस प्रकार है:जब मैं अलार्म दो बार शुरू करता हूं तो क्या होता है?

AlarmManager mgr=(AlarmManager)getSystemService(Context.ALARM_SERVICE); 
Intent i=new Intent(this, MyService.class); 
PendingIntent pi=PendingIntent.getService(this, 0, i, 0); 
mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi); 

क्या इससे कोई फर्क नहीं पड़ता कि जब भी मेरा ऐप शुरू होता है तो मैं वास्तव में यह कोड चलाऊंगा? मुझे ओवरकिल-प्रयोग के रूप में 10 गुना कॉल करते समय किसी भी दुष्प्रभाव को नहीं देख रहा है, लेकिन मुझे कोई संदर्भ नहीं मिल रहा है कि यह संयोग या अपेक्षित व्यवहार है या नहीं।

यदि यह विशेष रूप से अपेक्षित नहीं है, तो यह 'गलत' लगता है। AlarmManager के व्यवहार में परिवर्तन होने पर मुझे बाद में परेशानी हो सकती है।

उत्तर

13

चूंकि अलार्ममैनेजर के लिए रद्द विधि अलार्म को रद्द करने के 'समान' इरादे से ठीक है, तो हम कह सकते हैं कि मंच कक्षा के नाम दिए गए इरादे को पहचानता है। इसलिए इसे बार-बार कॉल करना कोई समस्या नहीं होनी चाहिए क्योंकि मंच को पता चलेगा कि इस तरह के लंबित इरादे के लिए अलार्म पहले से मौजूद है।

यहां एक post है जो कुछ समान बात करता है।

+0

हम्म, धन्यवाद! मैं उस सवाल से देखता हूं कि 'लंबित' वास्तव में वही है (जैसे दस्तावेज़ कहते हैं)। लेकिन 'setInexactRepeating' को उसी' लंबित इन्टेंट 'के साथ दो बार कॉल करना होगा ... दोहराया जा रहा है? – Nanne

+0

मुझे कोई संदर्भ नहीं मिल रहा है, लेकिन वर्तमान में कम से कम एक अलार्म शुरू करने के लिए एक ही 'लंबित इंटेंट' इसे एक बार फिर ट्रिगर नहीं करता है। मुझे लगता है कि अगर मैं इसे पहले से सेट कर दूंगा तो मैं सिर्फ शीर्ष जांच करूँगा। इस तरह से बहुत आसान है। धन्यवाद – Nanne

+1

क्या कोई संभावना है कि 'setInexactRepeating' को कई बार कॉल करने पर, अलार्म टाइमर रीसेट हो जाएगा? जैसे कि अंतराल 15 मिनट और 7 मिनट बीत चुका था, तो क्या दूसरी कॉल अंतराल के समय को रीसेट कर देगी? – aandis

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