2013-09-04 8 views
48

प्रत्येक एन मिलीसेकंड को फ़ंक्शन कॉल करने का सबसे सटीक तरीका क्या है? postDelayed टाइमरटास्क बनाम थ्रेड स्लीप बनाम हैंडलर पोस्टडेलेड - प्रत्येक एन मिलीसेकंड कॉल कॉल करने के लिए सबसे सटीक?

साथ Thread.Sleep

  • TimerTask
  • हैंडलर साथ

    • थ्रेड मैं Thread.Sleep का उपयोग कर this example संशोधित और यह बहुत सही नहीं है।

      मैं एक संगीत ऐप विकसित कर रहा हूं जो किसी दिए गए बीपीएम पर ध्वनि बजाएगा। मैं समझता हूं कि पूरी तरह सटीक मेट्रोनोम बनाना असंभव है और मुझे इसकी आवश्यकता नहीं है - बस ऐसा करने का सबसे अच्छा तरीका ढूंढना।

      धन्यवाद

  • +0

    मैं वरीय टाइमर प्राप्त करने के लिए इस –

    +0

    @BirajZalavadia टाइमर (का प्रयोग न करें http : //www.mopri.de/2010/timertask-bad-d ओ-इट-द-एंड्रॉइड-वे-यूज-ए-हैंडलर /), हैंडलर या शेड्यूल्ड थ्रेडपूल एक्स्सेलर का उपयोग करें। – AppiDevo

    उत्तर

    54

    टाइमर

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

    ScheduledThreadPoolExecutor सौदों चलाए जा रहे हैं और यह भावना टाइमर का उपयोग करने के लिए नहीं है .. वहाँ दो तरीकों से अपने मामले में काम का हो सकता है .. scheduleAtFixedRate (...) और scheduleWithFixedDelay (..) कर रहे हैं

    class MyTask implements Runnable { 
    
        @Override 
        public void run() { 
        System.out.println("Hello world"); 
        } 
    } 
    
    ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1); 
    long period = 100; // the period between successive executions 
    exec.scheduleAtFixedRate(new MyTask(), 0, period, TimeUnit.MICROSECONDS); 
    long delay = 100; //the delay between the termination of one execution and the commencement of the next 
    exec.scheduleWithFixedDelay(new MyTask(), 0, delay, TimeUnit.MICROSECONDS); 
    
    +0

    वाह! बहुत बहुत धन्यवाद - यह लगभग निर्दोष है! मेरी पुरानी विधि – fxfuture

    +0

    की तुलना में काफी बेहतर समय मैं एक आवधिक कार्य के लिए इस विधि को आजमा रहा हूं, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है http://stackoverflow.com/questions/27872016/scheduledthreadpoolexecutor-for-a-periodic-task-using- पुनः स्थापित-बस-फायरिंग-onc – dowjones123

    -9

    पाश कार्रवाई के लिए TimerTask का उपयोग करना बेहतर है।

    +12

    किस आधार पर? – JustWork

    +2

    मुझे गंभीरता से संदेह है, यह जांचें http://androidtrainningcenter.blogspot.in/2013/12/handler-vs-timer-fixed-period-execution.html – headsvk

    1

    वे सभी समान सटीक-वार हैं। जावा टाइमिंग सटीक सिस्टम टाइमर और शेड्यूलर की सटीकता और सटीकता के अधीन है और इसकी गारंटी नहीं है। Thread.sleep और Object.wait API देखें।

    7

    एंड्रॉइड पर आप अपने स्वयं के हैंडलर/संदेश कतार के साथ थ्रेड बना सकते हैं। यह काफी सटीक है। जब आप हैंडलर documentation देखते हैं तो आप देख सकते हैं कि यह इसके लिए डिज़ाइन किया गया था।

    एक हैंडलर के दो मुख्य उपयोग कर रहे हैं: (1) शेड्यूल करने के लिए संदेश और runnables भविष्य में किसी समय के रूप में क्रियान्वित किया जा करने के लिए; और (2) अपने आप से अलग थ्रेड पर निष्पादित करने के लिए एक क्रिया को लागू करने के लिए।

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