2011-04-19 10 views
10

हैलो मैं एक एंड्रॉइड विजेट लिख रहा हूं; मैं webservice से डेटा की निगरानी करने के लिए हर 1-5 मिनट अपडेट करना चाहता था लेकिन मुझे पता चला कि एंड्रॉइड: अपडेटपेरियोडमिल 30 मिनट से कम नहीं हो सकता .... मैं इस परिणाम को विजेट के साथ कैसे प्राप्त कर सकता हूं?एंड्रॉइड विगेट्स को अपडेट करना हर 1 मिनट

धन्यवाद और बधाई सी।

उत्तर

16

प्रत्येक 1 मिनट कॉल के लिए अलार्म प्रबंधक सेवा पंजीकृत करें।

final Intent intent = new Intent(context, UpdateService.class); 
final PendingIntent pending = PendingIntent.getService(context, 0, intent, 0); 
final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
alarm.cancel(pending); 
long interval = 1000*60; 
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),interval, pending); 

हालांकि, ऐप विजेट्स के अपडेट को धक्का देना एक महंगा ऑपरेशन है। प्रत्येक 1 मिनट को अपडेट करने से आपके "ऐप विजेट अपडेट करें" कोड को मेमोरी में निवासी होने के लिए मजबूर किया जाएगा जो हर समय चल रहा रहता है, और यह बैटरी को काफी महत्वपूर्ण भी खाएगा।

+0

हमें यह कोड कहां रखना है? एंड्रॉइड शुरुआती के रूप में, यह मेरी मदद नहीं करता है ... – Virthuss

+0

क्या इसे 'ऑनअपडेट' विधि में रखा जाना चाहिए? – natsumiyu

+1

यह एंड्रॉइड 6.0+ के लिए ठीक से काम नहीं करता है। डोज़ मोड आमतौर पर 'setRepeating()' के साथ अच्छी तरह से काम नहीं करता है। मैंने सब कुछ करने की कोशिश की, यहां तक ​​कि 'setExactAndAllowWhileIdle()' हर बार अलार्म बंद हो जाता है, लेकिन यह या तो नहीं जा रहा है, या 1 मिनट के बाद बहुत अधिक समय से बाहर जा रहा है। – Nikiforos

1

HandlersendMessageDelayed(..) पर एक संदेश या postDelayed(..)Runner का उपयोग करें।

new Handler().postDelayed(new Runnable() { 
    public void run() { ... }, 
    60000 /* one minute */ 
); 
+1

यहां स्वीकृत उत्तर: http://stackoverflow.com/questions/5671984/android-substuting-the-click-with-a-timer/5672264#5672264 हैंडलर और पोस्टडेलेड – Maximus

+0

का उपयोग करने का एक बहुत अच्छा उदाहरण देता है मान लें कि आपके पास कोड लगातार चल रहा है जो ऐप विजेट अपडेट करेगा। यह या तो एक दोषपूर्ण धारणा है या वास्तव में एक बुरा विचार है। – CommonsWare

+1

यदि उपयोगकर्ता डेस्कटॉप विजेट का मतलब है, जैसा कि android.appwidget क्लास में है, तो हाँ, मैं सहमत हूं, प्रियंका का जवाब सही है। हालांकि, यदि उपयोगकर्ता का मतलब कस्टम व्यू है, जैसे एंड्रॉइड.विजेट क्लास से कुछ, तो इसका मतलब है कि गतिविधि से जुड़ा एक व्यू पेड़, जो मेरी मूल धारणा थी। (ओह क्यों उन्होंने "विजेट" नाम को ओवलोड किया?) – Anm

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