2011-03-28 16 views
7

मेरी समस्या इस के समान है, How to update a widget every minute, हालांकि मैं केवल यूआई के टेक्स्टव्यू को अपडेट करना चाहता हूं। मुझे उस समय तक पहुंच की आवश्यकता है, दुर्भाग्य से डिजिटलक्लॉक दृश्य का उपयोग नहीं कर सकता है।टेक्स्ट व्यू को अपडेट करने का सबसे अच्छा तरीका, हर मिनट, मिनट

Ive शोध किया गया और हर मिनट अद्यतन करने के लिए तरीके पाया है, लेकिन मिनट पर नहीं तो वे सिस्टम घड़ी के साथ सिंक्रनाइज़ कर रहे हैं (ताकि वे सिंक्रनाइज़ेशन से बाहर 59 सेकंड तक हो सकती है!)

केवल तरीके मैं ऐसा करने में सोच सकते हैं यह कर रहे हैं (क) एक हैंडलर (या टाइमर) रन हर दूसरे (जो overkill की तरह एक सा लगता है अगर मैं केवल हर मिनट अद्यतन करना चाहते) Like this from the android.com resources

(ख) एक सेवा पृष्ठभूमि में चल रहा है । (मैं के रूप में मैं पहले से ही पृष्ठभूमि में चल रहा है और अधिक महत्वपूर्ण बातें हैं इस के लिए उत्सुक नहीं हूँ)

(ग) अलार्म प्रबंधक का उपयोग (फिर से overkill की तरह लगता है)

करने के लिए इस तरह के एक आसान बात होने के लिए लगता है, और अभी तक ...

किसी भी सलाह मेल

उत्तर

0

सराहना तुम एक TimerTask कि आपके TextView हर मिनट (अपने schedule विधि देखें) अद्यतन करता है चलाने के लिए एक Timer को विन्यस्त की कोशिश कर सकते हैं।

+0

ठनक, इस विचार से काम किया। मुझे वर्तमान तिथि, घटित सेकंड और मिलीसाउंड मिला है, इसलिए यह एक गोलाकार मिनट था। तब मैंने एक पूर्ण मिनट जोड़ा जब शुरू करने के लिए। आखिरकार, मैंने इसे हर मिनट (60 000 मिलीसेकंड) – Mel

+1

नवीनीकृत करने के लिए टाइमर सेट किया है यदि कोई दिलचस्पी लेता है तो यहां कुछ कोड है। स्टीव ओडी द्वारा लिखित कोड (http://steve.odyfamily.com/?p=12) बहुत उपयोगी था। 'कोड' myTimer = नया टाइमर(); ग्रेगोरियन कैलेंडर कैलेंडर calCreationDate = नया ग्रेगोरियन कैलेंडर(); int intMilli = calCreationDate.get (कैलेंडर। MILLISECOND); int intSeconds = calCreationDate.get (कैलेंडर.SECOND); calCreationDate.add (कैलेंडर। मिलिस्सेकोन्ड, (-1 * इंटमिलि)); calCreationDate.add (कैलेंडर .SECOND, -1 * intSeconds); calCreationDate.add (कैलेंडर। MINUTE, 1); तिथि की तारीखस्टार्टडेट = calCreationDate.getTime(); एंड्रॉइड काम में 'कोड' – Mel

+0

टाइमर, लेकिन वे पसंदीदा तरीका नहीं हैं। टाइमर के बजाय हैंडलर का प्रयोग करें! – Zordid

0

आप की कोशिश की postDelayed()

+0

आपके रीप्ले के लिए धन्यवाद। भले ही एंड्रॉइड.कॉम ​​पर लेख ने हैंडलर की सिफारिश की, स्टीव ओडी के लेख ने मुझे थोड़ा सा बंद कर दिया! – Mel

38

स्वीकार किए जाते हैं जवाब सवाल करने के लिए विशेष रूप से प्रतिक्रिया नहीं देता है। ओपी समय (सिस्टम घड़ी मिनट और 00 सेकंड पर) पर किसी प्रकार की घटना प्राप्त करने का तरीका मांगता है।

टाइमर का उपयोग करना ऐसा करने का सही तरीका नहीं है। यह केवल ओवरकिल नहीं है, लेकिन आपको इसे सही बनाने के लिए कुछ चाल का सहारा लेना चाहिए।

इस (यानी के रूप में एचएच समय दिखा एक TextView अद्यतन करें।: मिमी) करने के लिए सही रास्ता:

BroadcastReceiver _broadcastReceiver; 
private final SimpleDateFormat _sdfWatchTime = new SimpleDateFormat("HH:mm"); 
private TextView _tvTime; 

@Override 
public void onStart() { 
    super.onStart(); 
    _broadcastReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context ctx, Intent intent) { 
       if (intent.getAction().compareTo(Intent.ACTION_TIME_TICK) == 0) 
        _tvTime.setText(_sdfWatchTime.format(new Date())); 
      } 
     }; 

    registerReceiver(_broadcastReceiver, new IntentFilter(Intent.ACTION_TIME_TICK)); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (_broadcastReceiver != null) 
     unregisterReceiver(_broadcastReceiver); 
} 

प्रणाली की सही शुरुआत में इस प्रसारण घटना भेज देंगे इस तरह BroadcastReceiver उपयोग करने के लिए है सिस्टम घड़ी के आधार पर हर मिनट। हालांकि अपने टेक्स्ट व्यू को पहले से (वर्तमान सिस्टम समय पर) शुरू करने के लिए मत भूलना क्योंकि यह संभव है कि आप एक मिनट के मध्य में अपना यूआई पॉप करेंगे और अगले मिनट तक टेक्स्ट व्यू अपडेट नहीं किया जाएगा।

+0

आपका कोड बढ़िया काम कर रहा है! धन्यवाद .. प्रति सेकेंड समय कैसे अपडेट करें? – Rash

+1

दुर्भाग्य से ACTION_TIME_TICK मिनट पर तय किया गया है। अगर मुझे सेकंड के साथ वर्तमान समय दिखाने के लिए कभी भी टेक्स्टव्यू की आवश्यकता होती है, तो मुझे लगता है कि मैं सेकंड के लिए एक अलग टेक्स्ट व्यू का उपयोग करूंगा और इसे एक साधारण टाइमर के साथ संभालेगा (ब्रॉडकास्ट रिसीवर द्वारा हर मिनट पुनर्वित्त करने के लिए किसी भी लंबे समय तक चलने वाले पूर्वाग्रह से बचने के लिए)। टाइमर का उपयोग न करने का बिंदु यह है कि मूल रूप से, आप वास्तविक समय के मिनट पर मिनट परिवर्तन देखना चाहते हैं। सेकेंड आमतौर पर थोड़ा सा समस्या नहीं होती है, लेकिन हर मिनट पुनर्वितरण हमेशा चाल चलाना चाहिए। – Alex

+0

दोस्तों को पूरी तरह से काम कर रहा है, सबसे पहले मैंने तारीख को डेट पर सेट कर दिया है, और फिर हर मिनट इसे प्रसारण से अद्यतन किया जाता है। –

-1

यह मैं क्या उपयोग किया जाता है:

int secsUntilOnTheMinute=60-Calendar.getInstance().get(Calendar.SECOND); 

timer.scheduleAtFixedRate(new TimerTask() { 
    @Override 
    public void run() { 
     updateSendTimesHandler.sendEmptyMessage(0); 
    } 
}, secsUntilOnTheMinute*1000, 60000); 
+0

कृपया कोड पोस्ट करने के बजाए एक स्पष्टीकरण जोड़ें। –

+0

आपको टाइमरटास्क का उपयोग नहीं करना चाहिए क्योंकि यह विश्वसनीय नहीं है। और देखें: https://guides.codepath.com/android/Repeating- पारदर्शी- कार्य – jpact

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