दिलचस्प पोस्ट
Memcached बनाम Redis? वर्ड-रैप: ब्रेक-वर्ड IE8 में काम नहीं कर रहा है IOS5 पर "kCTMessageReceivedNotification" सूचना प्राप्त करते समय संदेश कैसे प्राप्त करें एसक्यूएल: मूल मूल्य बनाम मूलभूत मूल्यों का प्रयोग करना एक UITextView में लाइन ब्रेक जोड़ना सी # के साथ ASP.net में डेटाबेस से छवि प्रदर्शित करें एक वेबसाइट का परीक्षण करने का सबसे अच्छा तरीका मैं Rails में database.yml फ़ाइल को कैसे स्थापित कर सकता हूं? javax.mail.MessagingException: एसएमटीपी होस्ट से कनेक्ट नहीं हो सका: smtp.gmail.com, पोर्ट: 25; जब setAttribute vs.attribute = जावास्क्रिप्ट में उपयोग करने के लिए? IntelliJ में Intellisense अब काम नहीं करते मैं पायथन में matplotlib में 'बैकेंड' कैसे सेट कर सकता हूं? एक ही मशीन पर इंटरनेट एक्सप्लोरर 6, इंटरनेट एक्सप्लोरर 7 और इंटरनेट एक्सप्लोरर 8 चल रहा है मैं किसी तत्व को एक वर्ग कैसे जोड़ूं? प्रोग्रामात्मक रूप से स्तंभ और पंक्तियों को WPF Datagrid जोड़ें

एंड्रॉइड अलार्म मैनेजर – आरटीसी_वैक्यूप बनाम एलेक्सिडियल टाइमम WAKEUP

क्या कोई मुझे AlarmManager.RTC_WAKEUP बीच का अंतर बता सकता है। AlarmManager.RTC_WAKEUP और AlarmManager.ELAPSED_REALTIME_WAKEUPAlarmManager.ELAPSED_REALTIME_WAKEUP ? मैंने दस्तावेज़ीकरण पढ़ लिया है, लेकिन फिर भी वास्तव में एक को दूसरे के ऊपर उपयोग करने के निहितार्थ को समझ में नहीं आता है।

उदाहरण कोड:

  alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, scheduledAlarmTime, pendingIntent); alarmManager.set(AlarmManager.RTC_WAKEUP, scheduledAlarmTime, pendingIntent); 

कोड की दो पंक्तियां कितनी अलग होगी? जब कोड की ये दो पंक्तियां एक दूसरे के सापेक्ष निष्पादित होंगी?

तुम्हारी सहायता सराहनीय है।

Solutions Collecting From Web of "एंड्रॉइड अलार्म मैनेजर – आरटीसी_वैक्यूप बनाम एलेक्सिडियल टाइमम WAKEUP"

AlarmManager.ELAPSED_REALTIME_WAKEUP प्रकार बूट समय से अलार्म ट्रिगर करने के लिए उपयोग किया जाता है:

 alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 600000, pendingIntent); 

वास्तव में डिवाइस बूट के बाद 10 मिनट के बाद अलार्म बंद हो जाएगा

डिवाइस के अपटाइम को मापने के लिए डिवाइस बूट होने पर चलने शुरू करने वाला एक टाइमर होता है और यह डिवाइस के अपटाइम के अनुसार आपके अलार्म को ट्रिगर करता है।

जबकि, अलार्म AlarmManager.RTC_WAKEUPAlarmManager.RTC_WAKEUP घड़ी के समय के अनुसार अलार्म ट्रिगर करेगा। उदाहरण के लिए यदि आप ऐसा करते हैं:

 long thirtySecondsFromNow = System.currentTimeMillis() + 30 * 1000; alarmManager.set(AlarmManager.RTC_WAKEUP, thirtySecondsFromNow , pendingIntent); 

यह, दूसरी ओर, अब से 30 सेकंड अलार्म ट्रिगर करेगा

AlarmManager.ELAPSED_REALTIME_WAKEUP प्रकार का उपयोग AlarmManager.RTC_WAKEUP की तुलना में शायद ही कभी किया जाता है। AlarmManager.RTC_WAKEUP

वर्तमान में स्वीकृत और अप-वोट किए गए उत्तर के बावजूद, सिस्टमक्लॉक के साथ AlarmManager.ELAPSED_REALTIME * प्रकार * समयरेखा () हमेशा अलार्म और समय के लिए आरटीसी घड़ियों से अधिक विश्वसनीय रहे हैं।

एलार्म मैनेजर के साथ ELAPSED_REALTIME_WAKEUP का उपयोग बूट समय से शुरू होने वाले एक मोनोटोनिक घड़ी पर निर्भर करेगा " और सीपीयू बिजली बचत मोड में है, तब भी टिकटिक जारी रहता है, इसलिए सामान्य प्रयोजन अंतराल समय के लिए सिफारिश का आधार है "। इसलिए,

 alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60*1000, pendingIntent); 

1 मिनट (60 * 1000 मिलिसेकंड) में आपकी लंबित आग लग जाएगी।

जबकि, अलार्म मैनेजर। आरटीसी_वेक्यूपी युग के बाद से मिलीसेकंड में मानक "दीवार" समय के लिए है इसलिए,

 alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 60*10000, pendingIntent); 

यह अभी भी अलार्म को 60 सेकंड से ट्रिगर कर सकता है, लेकिन भरोसेमंद नहीं है, क्योंकि सिस्टमक्लॉक प्रलेखन में नोट किया गया है:

दीवार घड़ी को उपयोगकर्ता या फ़ोन नेटवर्क द्वारा सेट किया जा सकता है (setCurrentTimeMillis (लंबे) देखें), इसलिए समय अप्रत्याशित रूप से आगे या आगे बढ़ सकता है वास्तविक समय की तारीख और समय के साथ पत्राचार एक कैलेंडर या अलार्म घड़ी अनुप्रयोग जैसे महत्वपूर्ण है, तो यह घड़ी का उपयोग किया जाना चाहिए। अंतराल या बीता हुआ समय माप एक अलग घड़ी का उपयोग करना चाहिए। यदि आप System.currentTimeMillis () का उपयोग कर रहे हैं, तो समय का समय बदलने के लिए पता करने के लिए ACTION_TIME_TICK, ACTION_TIME_CHANGED और ACTION_TIMEZONE_CHANGED इंटेंट ब्रॉडकास्ट को सुनने पर विचार करें।

इसके अलावा, सवाल केवल * _WAKEUP अलार्म को संदर्भित करते हैं, लेकिन यह भी सुनिश्चित करने के लिए कि आप जागरूक बनाम गैर-जागृत अलार्म प्रदान करते हैं, यह सुनिश्चित करने के लिए अलार्म मैनैजर दस्तावेज़ भी देखें।

सिर्फ एक नोट। आप अपटाइम मिलिस कॉलिंग प्राप्त कर सकते हैं:

 long uptimeMillis = SystemClock.elapsedRealtime(); 

इसलिए यदि आप अब से 30 सेकंड अलार्म आग चाहते हैं, और आप सामान्य घड़ी के बजाय अपटाइम घड़ी का उपयोग करना चाहते हैं, तो आप ऐसा कर सकते हैं:

 long thirtySecondsFromNow = SystemClock.elapsedRealtime() + 30 * 1000; alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, thirtySecondsFromNow, pendingIntent); 

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

मैंने इस समस्या को अपनी स्वयं की परियोजना में इस तरह क्रमादेशित किया। नीचे दिए गए कोड में मैं उपयोग कर रहा हूँ

 AlarmManager.ELAPSED_REALTIME_WAKEUP 

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

// अलार्म को पकड़ने और आवश्यक होने पर रद्द करें

  public static ArrayList<String> alarmIntens = new ArrayList<String>(); 

//

  public static String setAlarm(int hour, int minutes, long repeatInterval, final Context c) { /* * to use elapsed realTime monotonic clock, and fire alarm at a specific time * we need to know the span between current time and the time of alarm. * then we can add this span to 'elapsedRealTime' to fire the alarm at that time * this way we can get alarms even when device is in sleep mood */ Time nowTime = new Time(); nowTime.setToNow(); Time startTime = new Time(nowTime); startTime.hour = hour; startTime.minute = minutes; //get the span from current time to alarm time 'startTime' long spanToStart = TimeUtils.spanInMillis(nowTime, startTime); // intentName = "AlarmBroadcast_" + nowTime.toString(); Intent intent = new Intent(intentName); alarmIntens.add(intentName); PendingIntent pi = PendingIntent.getBroadcast(c, alarms++, intent, PendingIntent.FLAG_UPDATE_CURRENT); // AlarmManager am = (AlarmManager) c .getSystemService(Context.ALARM_SERVICE); //adding span to elapsedRealTime long elapsedRealTime = SystemClock.elapsedRealtime(); Time t1 = new Time(); t1.set(elapsedRealTime); t1.second=0;//cut inexact timings, seconds etc elapsedRealTime = t1.toMillis(true); if (!(repeatInterval == -1)) am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, elapsedRealTime + spanToStart, repeatInterval, pi); else am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, elapsedRealTime + spanToStart, pi); 

जहां स्पैन फ़ंक्शन यह है:

  public static long spanInMillis(Time startTime, Time endTime) { long diff = endTime.toMillis(true) - startTime.toMillis(true); if (diff >= 0) return diff; else return AlarmManager.INTERVAL_DAY - Math.abs(diff); } 

अलार्म रद्द समारोह यह है।

 public static void cancel(Context c) { AlarmManager am = (AlarmManager) c .getSystemService(Context.ALARM_SERVICE); // cancel all alarms for (Iterator<String> iterator = alarmIntens.iterator(); iterator .hasNext();) { String intentName = (String) iterator.next(); // cancel Intent intent = new Intent(intentName); PendingIntent pi = PendingIntent.getBroadcast(c, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); am.cancel(pi); // iterator.remove(); } } 

कुछ महत्वपूर्ण नोट्स का चयन करते समय चुनने के लिए जो अलार्म : (जिनके लिए पहले से ही अपवादित वोट पढ़ चुके हैं)

RTC_WAKEUP मौत की घाटी – समय परिवर्तन:
यदि उपयोगकर्ता ने मैन्युअल रूप से पिछली बार समय बदल दिया है तो अलार्म बंद नहीं होगा, और RTC टाइमस्टैंप से पहले ही भविष्य में अलार्म तुरंत निकल जाएंगे।
किसी भी ग्राहक की ओर से सत्यापन / महत्वपूर्ण कार्य करने के लिए इस अलार्म का उपयोग करें क्योंकि इसमें विफल होने का मौका है।

WAKEUP अर्थ (मार्शमॉल और ऊपर)
सामान्य में – ज्यादा नहीं डिवाइस को idle या idle दौरान, उस alarmManager.setExactAndAllowWhileIdle लिए alarmManager.setExactAndAllowWhileIdle और alarmManager.setAndAllowWhileIdle या alarmManager.setAndAllowWhileIdle alarmManager.setExactAndAllowWhileIdle और alarmManager.setAndAllowWhileIdle ( डोज़ एंड आइडल )