2011-11-18 15 views
5

इस वर्ग, AnimationThread पर विचार करें:रन() को केवल एक बार क्यों बुलाया जा रहा है?

class AnimationThread implements Runnable { 
    public void pause() { 
     doAnimation = false; 
    } 

    public void doStart(){ 
     doAnimation = true; 
    } 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     if (doAnimation) { 
      //my code 
     } 

     try { 
      Thread.sleep(500); 
     } 
     catch (InterruptedException e) { 

     } 
    } 
} 

अब मैं एक गतिविधि की onCreate में इस सूत्र शुरू करने कर रहा हूँ (बस किसी न किसी कोड दिखाते हुए):

AnimationThread animRunnable = new AnimationThread(); 
animationThread = new Thread(animRunnable); 
animationThread.start(); 

लेकिन run() सिर्फ एक बार कहा जाता रहा है (मैं का पता लगाया पुष्टि करने के लिए एक लॉग)। मैं सिर्फ यह जानना चाहता हूं कि जब मैंने धागा शुरू किया तो run() को 500 नींद के साथ बार-बार बुलाया नहीं जा रहा है। इसे सिर्फ एक बार बुलाया जाता है।

उत्तर

12

है यही कारण है कि यह कैसे माना जाता है।

एक थ्रेड अपनी रन विधि (केवल एक बार) निष्पादित करके चलाता है। इसके बाद इसे माना/मृत/समाप्त/पूरा माना जाता है।

यदि आप लूप करना चाहते हैं, तो आपको इसे स्वयं (रन विधि के अंदर) करना होगा, या रनवेबल को बार-बार कॉल करने के लिए कुछ निष्पादक सेवा का उपयोग करना होगा।

+0

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

+0

यह एक आम पैटर्न है। हालांकि, संभवतः आप प्रोग्राम को बंद करने के लिए थ्रेड को अंततः समाप्त करना चाहते हैं। या आप इसके लिए एक डेमॉन थ्रेड का उपयोग कर सकते हैं। – Thilo

8

बेशक run() विधि एक बार निष्पादित की जाएगी। यदि आप run विधि के अंदर बयान दोहराना चाहते हैं तो आपको लूप का उपयोग करना होगा। TimerTask पर एक नज़र डालें - एक निश्चित समय पर या बार-बार कार्य करेगा।

संपादित करें:

  1. Android - Controlling a task with Timer and TimerTask?
  2. Timer task schedule
+0

धन्यवाद। क्या आप मुझे एक उदाहरण लिंक दिखा सकते हैं। कृप्या। –

+1

@ user925224 - मैंने अपनी पोस्ट संपादित की है। – adatapost

+0

+1 जो भी उपयोगकर्ता ने पूछा है उसे देने के लिए .. – ngesh

0

run() एक ऐसी विधि है जिसे किसी भी Thread द्वारा केवल एक बार निष्पादित किया जाता है। क्योंकि run method को समाप्त करने के बाद थ्रेड dead or completed है।
तो एक थ्रेड रन के लिए केवल एक ही निष्पादित होगा। अगर आप थ्रेड को मारना नहीं चाहते हैं तो आपको यह सुनिश्चित करना होगा कि रन खत्म हो ...

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