2013-03-15 14 views
14

फिर से शुरू करें मेरे पास मेरे एंड्रॉइड ऐप में एक एनीमेशन है जो टेक्स्टव्यू को विभिन्न रंगों को चमकता है। मैंने इसे कार्यान्वित करने के लिए टाइमरटास्क, टाइमर और रननेबल विधि का उपयोग किया है। मुझे ऐसा करने की ज़रूरत है जब कोई उपयोगकर्ता इस एनीमेशन के दौरान ऐप को रोकता है(), और जब उपयोगकर्ता ऐप पर रीस्यूम() पर वापस आ जाता है तो थ्रेड फिर से शुरू करें। निम्नलिखित कोड है जिसे मैंने कार्यान्वित किया है, लेकिन यह काम नहीं कर रहा है (ऑन पॉज़(), और ऑनस्यूम() टुकड़े), और मुझे समझ में नहीं आता क्यों। मैंने इसी तरह के मामलों पर कुछ अन्य पोस्ट पढ़ी हैं, लेकिन उन्होंने मुझे मेरी स्थिति में क्या करना है यह जानने में मदद नहीं की है। मैंने पढ़ा है कि टाइमरटास्क पुराना है, और मुझे शायद एक निष्पादक सेवा विधि का उपयोग करना चाहिए; यह मेरे लिए अस्पष्ट है कि इस समारोह को कैसे कार्यान्वित किया जाए।कैसे रोकें, और टाइमरटास्क/टाइमर

...timerStep5 = new TimerTask() { 

     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
       if (b5) { 
        cashButton2SignalText.setBackgroundColor(Color.RED); 
        cashButton2SignalText.setTextColor(Color.WHITE); 
        b5=false; 
       } else { 
        cashButton2SignalText.setBackgroundColor(Color.WHITE); 
        cashButton2SignalText.setTextColor(Color.RED); 
        b5=true; 
       } 
       } 
      }); 
     } 
}; 

timer5.schedule(timerStep5,250,250); 

} 

public void onPause(){ 

    super.onPause(); 

    timerStep5.cancel(); 

} 

public void onResume(){ 

    super.onResume(); 

    timerStep5.run(); 

} 
+0

की [रोकना/रोक और शुरू करने/जावा TimerTask लगातार शुरू करने?] संभावित डुप्लिकेट (http://stackoverflow.com/questions/2098642/pausing-stopping-and-starting-resuming-java-timertask-continuously) – Gboy

उत्तर

12

एक TimerTask के बाद रोकने के बाद उसे फिर से नहीं चल सकता है, तो आप एक नया उदाहरण बनाने के लिए किया है।

पढ़ें यहाँ विवरण:

https://stackoverflow.com/a/2098678/727768

ScheduledThreadPoolExecutor नए कोड के लिए सिफारिश की है, यह अपवाद और कार्य अनुसूचित अंतराल से अधिक समय के लिए समय निकालने तरह के मामलों को संभालती है।

लेकिन आपके कार्य के लिए, TimerTask पर्याप्त होना चाहिए।

+0

ठीक है, मैंने पहले इस पोस्ट को देखा था, और इसके साथ उलझन में था; हो सकता है कि आप मेरे लिए कुछ स्पष्टीकरण दे सकें: कोई उपयोगकर्ता टाइमर टास्क गतिविधि के दौरान अपना ऐप छोड़ सकता है, और उस गतिविधि पर एक से अधिक बार वापस आ सकता है। इसका मतलब यह नहीं होगा कि जब भी उपयोगकर्ता इस गतिविधि के दौरान छोड़ देता है, तो रिटर्न() के भीतर टाइमरटास्क का एक नया उदाहरण बनाना होगा, और रिटर्न? – embersofadyingfire

+0

प्रश्न: यदि मैं इस गतिविधि को एक पल के लिए छोड़ने और लौटने के लिए किसी उपयोगकर्ता की कार्रवाई को अनदेखा करना चाहता था, और टाइमरटास्क को रोकने और फिर से शुरू करने के लिए किसी भी कार्यान्वयन को छोड़ दिया गया था, लेकिन जब उपयोगकर्ता अंत में आगे बढ़ता है तो टाइमरटास्क को रद्द करने के लिए स्टॉप() पर लागू किया गया था एक और गतिविधि, क्या यह किसी प्रकार की मेमोरी रिसाव का कारण बनती है जबकि टाइमर टास्क गतिविधि रोक दी जाती है? – embersofadyingfire

+1

मुझे नहीं लगता कि कोई स्मृति रिसाव होगी, लेकिन यह आपके यूआई को अद्यतन करने के लिए कुछ भी नहीं करने के लिए काम को अद्यतन करने की समझ में नहीं आता है। हां, आपको मक्खी पर टाइमरटास्क बनाना होगा और यह पुन: प्रयोज्य नहीं है। यह इस तरह से डिजाइन किया गया है। (मुझे थ्रेड-सुरक्षा के लिए लगता है) इसके अलावा रेस्यूम कुछ तंग लूप नहीं है, ऑब्जेक्ट बनाने की लागत नगण्य है। –

2

यहां मैंने यह कैसे किया। पॉज़ टाइमर बूलियन जोड़ें जहां कभी विराम होता है (बटन श्रोता शायद) और सत्य होने पर टाइमर गिनें नहीं।

private void timer(){ 
    Timer timer = new Timer(); 
    tv_timer = (TextView) findViewById(R.id.tv_locationTimer); 
    countTimer = 0; 
    timer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        String s_time = String.format("%02d:%02d:%02d", 
          countTimer/3600, 
          (countTimer % 3600)/60, 
          countTimer % 60); 
        tv_timer.setText(s_time); 
        if (!pauseTimer) countTimer++; 
       } 
      }); 
     } 
    }, 1000, 1000); 
} 
संबंधित मुद्दे