2011-07-15 12 views
8

का उपयोग किए बिना कुछ सेकंड की देरी दें, मैं धागे का उपयोग किए बिना कुछ सेकंड की देरी कैसे दे सकता हूं। कुछ फ़ंक्शन जिसे मैं देरी देने के लिए कहीं भी कॉल कर सकता हूं। एंड्रॉइड अंतर्निहित फ़ंक्शन अत्यधिक पसंद किया जाता है। धन्यवादधागे

उत्तर

18

एक हैंडलर का उपयोग करें, और पोस्टडेलेड() जैसी विधि का उपयोग करके या तो एक साधारण संदेश या इसे चलाने योग्य भेजें।

उदाहरण के लिए, संदेश और Runnables प्राप्त करने के लिए एक हैंडलर वस्तु को परिभाषित:

private Handler mHandler = new Handler(); 

को परिभाषित Runnable:

private Runnable mUpdateTimeTask = new Runnable() { 
    public void run() { 
     // Do some stuff that you want to do here 

    // You could do this call if you wanted it to be periodic: 
     mHandler.postDelayed(this, 5000); 

     } 
    }; 

कारण Runnable ms में एक निर्दिष्ट विलंब के बाद हैंडलर के लिए भेजा जाना :

mHandler.postDelayed(mUpdateTimeTask, 1000); 

यदि आप से जटिलता नहीं चाहते हैं हैंडलर को रननेबल करने के लिए, आप विधि को sendEmptyMessageDelayed() का उपयोग करके सबसे सरल सादगी के लिए भी एक संदेश भेज सकते हैं - यहां तक ​​कि एक खाली संदेश भी। एक स्थिर संदर्भ

public final class Config { 
    public static MainActivity context = null; 
} 

से

+0

धन्यवाद! मैंने अभी 'नया हैंडलर() भेज दिया है। sendEmptyMessageDelayed (1, 2500); हालांकि मुझे नहीं पता कि' int क्या' मान – austin

+2

का प्रतिनिधित्व करता है जो लिंक आप प्रदान करते हैं अब उपलब्ध नहीं है ... – amalBit

+0

ठीक है, लिंक हटा दिया गया है। मुझे लगता है कि जवाब काफी आत्मनिर्भर है क्योंकि यह अभी भी है। – Trevor

0

कॉल देरी विधि MainActivity में:

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    ... 
    Config.context = this; 
    ... 
} 

... 

public void execute_method_after_delay(final Callable<Integer> method, int millisec) 
{ 
    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       method.call(); 
      } 
      catch (Exception e) { 

      } 
     } 
    }, millisec); 
} 

से किसी भी वर्ग का उपयोग कर स्थिर तरीकों:

private static void a_static_method() 
{ 

    int delay = 3000; 
    Config.context.execute_method_after_delay(new Callable<Integer>() { 
     public Integer call() { 
      return method_to_call(); 
     } 
    }, delay); 


} 

public static Integer method_to_call() 
{ 
    // DO SOMETHING 
संबंधित मुद्दे