2011-09-13 16 views
28

क्या होगा अगर मेरे पास पहले से ही निष्पादन के तहत handler.postDelayed धागा है और मुझे इसे रद्द करने की आवश्यकता है?handler.post को रद्द कैसे करें?

+0

पूरा धागा या सिर्फ संदेश? –

+0

पूरा धागा। – Eugene

+0

[बाहर निकलें] (http://developer.android.com/reference/android/os/HandlerThread.html#quit()) यह। –

उत्तर

46

मैं पोस्ट रद्द करने के लिए ऐसा करता हूं, Android के अनुसार: removeCallbacks संदेश कतार में चलने योग्य रन के किसी भी लंबित पोस्ट को हटा देता है।

handler.removeCallbacks(runnableRunner); 

या सभी संदेशों और कॉलबैक

handler.removeCallbacksAndMessages(null); 
+0

स्निपेट के साथ अधिक जानकारी: http://stackoverflow.com/questions/5885587/how-to-cancel-handler-in-code – Basher51

9

दूर करने के लिए आप runnable के संदर्भ रखने के लिए नहीं करना चाहते हैं का उपयोग करें, तो आप बस कह सकते हैं:

handler.removeCallbacksAndMessages(null); 

The official documentation कहते हैं :

... यदि टोकन शून्य है, अल एल कॉलबैक और संदेश हटा दिए जाएंगे।

0

मेरे पास एक उदाहरण था जहां मुझे एक पोस्ट रद्द करने की आवश्यकता थी, जबकि यह चलने की प्रक्रिया में था, इसलिए ऊपर दिया गया कोड मेरे उदाहरण के लिए काम नहीं करता था। मैं जो कर रहा था वह मेरे रननेबल के अंदर एक बूलियन चेक था, इसलिए जब दिए गए समय के बाद कोड निष्पादित किया गया था, तो उस समय यह उस पर आधारित होगा कि उस समय बुलियन मूल्य क्या था और यह मेरे लिए काम करता था।

public static Runnable getCountRunnable() { 
    if (countRunnable == null) { 
     countRunnable = new Runnable() { 
      @Override 
      public void run() { 
       if (hasCountStopped) 
        getToast("The count has stopped"); 
      } 
     }; 
    } 
    return countRunnable; 
} 

FYI करें - मेरी गतिविधि में नष्ट मैं अन्य डेवलपर्स, handler.removecallback और हैंडलर = अशक्त द्वारा सुझाए गए कोड का उपयोग करते हैं, कोड को साफ रखने के लिए हैंडल को रद्द करने के लिए और सुनिश्चित करें कि सबकुछ हटा दिया जाएगा।

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