2017-01-18 6 views
5

Handler.postDelayed(Runnable r, long delayMillis) के प्रलेखन के अनुसार:मुख्य धागे पर View.postDelayed() और हैंडलर.postDelayed() के बीच क्या अंतर है?

कारण Runnable आर समाप्त होने के समय की निर्धारित राशि के बाद चलाने के लिए, संदेश कतार में शामिल होना। रननेबल को उस थ्रेड पर चलाया जाएगा जिस पर यह हैंडलर संलग्न है।

दूसरी ओर View.postDelayed(Runnable action, long delayMillis) पर:

कारण Runnable के बाद निर्दिष्ट समयावधि समाप्त होने के चलाने के लिए संदेश कतार में शामिल होना,। रननेबल उपयोगकर्ता इंटरफ़ेस थ्रेड पर चलाया जाएगा।

मैं जानना चाहता हूं कि मुख्य धागे से उन्हें कॉल करते समय दोनों के बीच कोई अंतर है और विशेष रूप से, यदि गतिविधि नष्ट हो रही है तो कोई अंतर है?

मैंने इस article को पढ़ा है कि जब मैं एक आंतरिक कक्षा हैंडलर का उपयोग करता हूं तो मैं गतिविधि को कैसे रिसाव कर सकता हूं और मैं सोच रहा था कि View.postDelayed() का उपयोग करना एक ही समस्या का कारण होगा।

उदाहरण के लिए foo() किसी समस्या का कारण बन सकता है या गतिविधि का विनाश इस तथ्य को हल करेगा कि Runnable अज्ञात वर्ग गतिविधि का संदर्भ रख रहा है?

public class MyActiviy extends Activity { 
    private void foo(View v) { 
     v.postDelayed(new Runnable() { 
      public void run() { 
       // some delayed work 
      } 
     }, 60000); 
     finish(); 
    } 
} 

उत्तर

8

स्रोत से, View.postDelayed() बस एक आंतरिक हैंडलर पर Handler.postDelayed() उपयोग कर रहा है तो वहाँ कोई अंतर नहीं है।

foo() गतिविधि को रिसाव कर सकता है, तो आपको इस मौके को कम करने के लिए View.removeCallbacks() का उपयोग करना चाहिए।

+0

कृपया स्रोत के लिए लिंक प्रदान करें। – CopsOnRoad

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