2013-01-10 16 views
6

रद्द करता हूं ऑनक्रेट पर, मैं एक कार्य चलाता हूं जो हर मिनट दोहराता है। यहां मैं यह कैसे करता हूं:timer.scheduleAtFixedRate बंद नहीं होता है जब मैं

myTimer = new Timer(); 
    int delay = 30000; // delay for 30 sec. 
    int period = 600000; // repeat every 60 sec. 
    doThis = new TimerTask() { 
     public void run() { 

        Log.v("TImer","repeated"); 
        wv.reload(); 

     } 
    }; 

    myTimer.scheduleAtFixedRate(doThis, delay, period); 

वह कोड कोड पर है। इसलिए, जब ऐप स्क्रीन से निकलता है, तो मैं लॉगकैट में देख सकता हूं कि टाइमर स्टील चलता है, और जब तक ऐप नष्ट नहीं हो जाता तब तक नहीं रुक जाएगा। तो, गतिविधि के में मैं myTimer.cancel(); पर कॉल करता हूं लेकिन इससे मदद नहीं मिली। मैं अभी भी लॉगकैट में अपडेट देख सकता हूं, भले ही ऐप स्क्रीन पर न हो। तो, timerTask को कैसे रोकें?

उत्तर

4

यहां आपका कोड मेरी फ़ाइल में डाल दिया गया है, मूल्यों में देरी और अवधि tweaked के साथ मुझे इतना लंबा इंतजार नहीं करना है। मैं ऐप चलाता हूं। मैं LogCat में संदेश देखता हूं। मैं अपने गैलेक्सी एस 3 पर होम बटन दबाता हूं। फिर संदेश लॉगकैट में रुकते हैं।

public class MainActivity extends Activity { 
Timer myTimer; 
TimerTask doThis; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myTimer = new Timer(); 
    int delay = 0; // delay for 30 sec. 
    int period = 1000; // repeat every 60 sec. 
    doThis = new TimerTask() { 
     public void run() { 

        Log.v("TImer","repeated"); 

     } 
    }; 

    myTimer.scheduleAtFixedRate(doThis, delay, period); 
} 

@Override 
protected void onPause() { 
    myTimer.cancel(); 
    super.onPause(); 
} 

} 
+0

मैंने इसे ऑनस्ट पर रखा और अब यह काम करता है, अजीब क्यों यह काम नहीं करता है ... – Daler

+0

अजीब। Log.v आपकी ऑन-पॉज़ विधि में कुछ भी दिखाता है? यदि नहीं, तो मुझे लगता है कि इसे गलत लिखा जा सकता है, या शायद आपका पी ऊपरी मामला नहीं है या कुछ और जगह नहीं है - इसलिए इसे वास्तव में नहीं कहा जा रहा है। –

+0

)) ठीक है, मेरे ऑनपॉज़ को गलत घोषित किया गया था ...) – Daler

0

ऐसा हो सकता है क्योंकि धागा पहले ही भेज दिया गया है, यह आखिरी बार चलता है। ऑनलोड में एक चर को सत्य पर सेट करें, फिर ऑनपॉज़ में इसे गलत पर सेट करें। फिर आपके टाइमर कार्य में चर कोड सही होने पर ही आपका कोड चलाएं।

यद्यपि नया विवरण के बाहर लॉग को लिखें। यदि यह वास्तव में केवल एक आखिरी बार चल रहा है, तो यह आपका समाधान हो सकता है। लेकिन अगर यह अभी भी चालू होने के बाद इसे कई बार चला रहा है तो मेरा समाधान न लें।

+0

मैंने इस तरह से कोशिश की, यह काम नहीं करता है। और यह बार-बार दोहराता है, इसलिए .. – Daler

+0

आपका कोड मेरे लिए काम करता है, सिवाय इसके कि मैंने wv.reload() को लिया है; - सुनिश्चित नहीं है कि आप उस विधि में क्या कर रहे हैं। क्या ऐसा कुछ ऐसा है जिससे ऐप फिर से शुरू हो जाए? –

+0

इसके अलावा, क्या आप यह सुनिश्चित करने के लिए अपने ऑन-पॉज़ विधि पर Log.v डाल सकते हैं कि वास्तव में इसे निकाल दिया जा रहा है? –

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