2014-04-03 8 views
5

मैं Handler की postDelayed विधि का उपयोग कर रहा है ताकि समय की निश्चित राशि के बाद कोई कार्रवाई करने के:हैंडलर पोस्ट देरी के समय को कैसे बदलें/रीसेट करें?

private static int time_to_wait = 2000; 

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() { 
    // Make Action 
    } 
}, time_to_wait); 
अब प्रतीक्षा समय मैं की वजह से शेष मिलीसेकंड का मूल्य बदलना चाहते हैं के बीच में

कुछ प्रोसेसिंग परिणाम, मान लें कि अब यह 1000 एमएस का इंतजार कर रहा है और मैं इसे से फिर से गिनना शुरू करना चाहता हूं, इसलिए, मैंने time_to_wait मान 2000 तक सेट किया है, लेकिन यह इसे गिनती में नहीं लेता है क्योंकि यह केवल लेता है var value (2000) औरको बदलने के बावजूद उस समय प्रतीक्षा करता हैकिसी भी अन्य मूल्य के लिए मूल्य।

+1

मुझे विश्वास करने योग्य चलाने के लिए आपको रद्द करना और दोबारा पोस्ट करना होगा। [StackOverflow] [1] [1]: http://stackoverflow.com/questions/7407242/how-to-cancel-handler-postdelayed – Kaediil

+0

@Kaediil ऐसा नहीं होगा कि मेरे मामले में कुशल –

+0

'int' एक आदिम प्रकार है और मूल्य से पारित किया जाता है - मान की प्रतिलिपि बनाई जाती है, और किसी भी तरह मूल आदिम चर से जुड़ा नहीं है। यदि आप कुछ विधि में 'int' चर पारित करते हैं, और फिर उस चर को कहीं और (उस विधि के बाहर) बदलने की कोशिश करें, तो चर में परिवर्तन इस विधि में दिखाई नहीं देंगे, क्योंकि इसमें इसकी चर की – Drew

उत्तर

7

इसे आसानी से एक रननेबल बनाया जा सकता है जिसे हैंडलर द्वारा प्रदर्शित किया जाएगा, फिर हैंडलर को स्थिर सदस्य के रूप में बनाया जाएगा, अंत में जब आप इसे रोकना चाहते हैं तो बस अपने बनाए गए रननेबल के कॉलबैक को हटा दें, और यदि आप चाहते हैं इसे पुनरारंभ करें आपको कॉलबैक को हटाना होगा और इसे फिर से असाइन करना होगा:

Runnable myRunnable = new Runnable() { 
    @Override 
    public void run() { 
     // your code here 
    } 
}; 

public static Handler myHandler = new Handler(); 
private static final int TIME_TO_WAIT = 2000; 

public void start() { 
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT); 
} 

public void stop() { 
    myHandler.removeCallbacks(myRunnable); 
} 

public void restart() { 
    myHandler.removeCallbacks(myRunnable); 
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT); 
} 
0

तुम सिर्फ

handler.removeMessage(what) 
handler.sendMessageDelayed(time_to_wait + INTERVER); 

हर बार जब आप पहली जरूरत संदेश निकालें और फिर एक नया संदेश भेज कोशिश कर सकते हैं।

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