2012-01-07 14 views
24

मुझे एंड्रॉइड के लिए setTimeOut(call function(),milliseconds); के बराबर कोड की आवश्यकता है।Android के लिए setTimeOut() जावास्क्रिप्ट के बराबर क्या है?

setTimeOut(call function(),milliseconds); 
+3

के संभावित डुप्लिकेट http://stackoverflow.com/q/4817933/776084 – RanRag

उत्तर

21

आप शायद बाहर TimerTask

जाँच करने के लिए लाया के बाद से यह फिर से मुझे कोई दूसरी सिफारिश है, जो एक Handler है करना चाहते हैं चाहते हैं। टाइमरटास्क की तुलना में उपयोग करना आसान है क्योंकि आपको runOnUiThread को स्पष्ट रूप से कॉल करने की आवश्यकता नहीं होगी क्योंकि हैंडलर यूआई थ्रेड से जुड़ा होगा जब तक कि यह यूआई थ्रेड पर बनाया गया हो या आप इसे इसके निर्माता के मुख्य लूपर का उपयोग करके बनाते हैं। यह इस तरह से काम करेगा:

  1. आपकी गतिविधि बंद/गैर दिखाई, जबकि अपनी हैंडलर अभी भी अगर आप डॉन चल रहा है हो सकता है:

    private Handler mHandler; 
    Runnable myTask = new Runnable() { 
        @Override 
        public void run() { 
        //do work 
        mHandler.postDelayed(this, 1000); 
        } 
    } 
    
    @Override 
    public void onCreate(Bundle savedState) { 
        super.onCreate(savedState); 
        mHandler = new Handler(Looper.getMainLooper()); 
    } 
    //just as an example, we'll start the task when the activity is started 
    @Override 
    public void onStart() { 
        super.onStart(); 
        mHandler.postDelayed(myTask, 1000); 
    } 
    
    //at some point in your program you will probably want the handler to stop (in onStop is a good place) 
    @Override 
    public void onStop() { 
        super.onStop(); 
        mHandler.removeCallbacks(myTask); 
    } 
    

    से कुछ चीज़ों पर अपनी गतिविधि में संचालकों के साथ के बारे में पता होना करने के लिए कर रहे हैं इसे रोकने में रोकें (या अगर आप इसे रीज़्यूम में शुरू करते हैं तो), यदि आप यूआई

  2. अपडेट करने का प्रयास करते हैं तो यह समस्याएं पैदा करेगा यदि आपका फोन गहरी नींद में जाता है तो हैंडलर जितनी बार आपके पास आग लगेंगे निर्दिष्ट। मुझे यह पता है क्योंकि मैंने कई घंटे के ऑपरेशन के बाद कनेक्टिविटी का परीक्षण करने के लिए ब्लूटूथ उपकरणों के साथ कुछ व्यापक परीक्षण किया है और मैंने हर बार लॉग प्रिंट के साथ हैंडलर का इस्तेमाल किया था।
  3. यदि आपको इस टाइमर को चलने की आवश्यकता है तो मैं इसे एक सेवा में डालने की अनुशंसा करता हूं जो एक गतिविधि से अधिक समय तक टिकेगा। सेवा के साथ अपनी गतिविधि को पंजीकृत करें (सेवा के साथ संचार के लिए सेवा में परिभाषित इंटरफ़ेस को कार्यान्वित करके)।
+0

लिंक काम नहीं कर रहा है। – laarsk

+1

यह आपके लिए तय किया गया है। –

+0

इसके लिए धन्यवाद! :) – laarsk

11

यह वह कोड है जिसे मैंने अपने वर्तमान प्रोजेक्ट में उपयोग किया था। मैट ने कहा कि मैंने टिमरटास्क का इस्तेमाल किया था। 60000 मिलीसेक है। = 60 सेकंड मैंने मैच स्कोर रीफ्रेश करने के लिए इसका इस्तेमाल किया।

private void refreshTimer() { 
     autoUpdate = new Timer(); 
     autoUpdate.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       runOnUiThread(new Runnable() { 
        public void run() { 
         adapter = Score.getScoreListAdapter(getApplicationContext()); 
         adapter.forceReload(); 
         setListAdapter(adapter); 
        } 
       }); 
      } 
     }, 0, 60000); 
+0

यह काम नहीं करता है। ऑटो अपडेट का क्या अर्थ है? और रनऑनयू थ्रेड। माइनस – l0gg3r

+3

वे प्रश्न शायद ही प्रासंगिक हैं, l0gg3r। उन्होंने UI थ्रेड पर, 60 सेकंड के बाद चलाने के लिए निर्धारित कार्य का एक उदाहरण दिया। किसी भी एंड्रॉइड डेवलपर को कोड को आसानी से समझना चाहिए। –

+0

एक बात, हालांकि, @GiantRobot। यह उदाहरण setTimeout से setInterval की तरह व्यवहार करता है। सेटटाइमआउट के लिए इस कोड का उपयोग करने के लिए आवश्यक परिवर्तन होंगे: मानों का क्रम बदलें (60000, 0 के बजाय 0, 60000) और टाइमर को रन() फ़ंक्शन में रोकें, ताकि यह केवल एक बार चलता है। –

1

setTimeout() underscore-java पुस्तकालय में विधि नहीं है।

कोड उदाहरण:

import com.github.underscore.lodash.$; 
import com.github.underscore.Function; 

public class Main { 

    public static void main(String[] args) { 
     final Integer[] counter = new Integer[] {0}; 
     Function<Void> incr = new Function<Void>() { public Void apply() { 
      counter[0]++; return null; } }; 
     $.setTimeout(incr, 100); 
    } 
} 

समारोह एक नया धागा साथ 100ms में शुरू कर दिया जाएगा।

1

वैलेंटीन जवाब देने के लिए एक निरंतरता के रूप में जावा अंडरस्कोर का उपयोग कर:

Gradle निर्भरता जोड़ें:

dependencies { 
    compile group: 'com.github.javadev', name: 'underscore', version: '1.15' 
} 

जावा:

import com.github.underscore.lodash.$; 

$.setTimeout(new Function<Void>() { 
    public Void apply() { 
     // work 
     return null; 
    } 
}, 1000); // 1 second 
संबंधित मुद्दे