2011-12-01 12 views
5

मैं पहले कार्य को पूरा करने के बाद एक asynctask निष्पादित करना चाहता हूं। लेकिन स्थिति को प्रिंट करते समय पहले कार्य के लिए यह हमेशा रनिंग दिखाता है। अगर दोनों कार्यों को समानांतर निष्पादित करें तो केवल छोटे कार्य को निष्पादित किया जाएगा। मैं गतिविधि की प्रक्रिया में दोनों चल रहा हूं। कोई विचार?Asynctask स्थिति हमेशा चल रहा है

अभी यहाँ मेरी कोड नमूना

public class test extends Activity 
{ 

    ExecuteTask1 task1; 
    ExecuteTask2 task2; 
@Override 
public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

      task1 = new ExecuteTask1(); 
      task1.execute(token); 
      System.out.println(task1.getStatus()); 
      if(task1.getStatus() ==AsyncTask.Status.FINISHED) 
      { 
       task2 = new ExecuteTask2(); 
       task2.execute(token); 
      } 

    } 
} 

उत्तर

4

अपने कोड में है, तो आप समाप्त करने के लिए task1 समय दे रही है नहीं कर रहे हैं। कार्य 1 की onPostExecute विधि से कार्य 2 प्रारंभ करें। वैकल्पिक रूप से (आप इस काम करने के लिए वर्ग ExecuteTask1 में कोड को संशोधित करना होगा।)

, task1 कॉल वापस अपनी गतिविधि करने के लिए है (या इसे या कुछ और करने के लिए एक संदेश पोस्ट) onPostExecute में तो अपनी गतिविधि तो task2 शुरू कर सकते हैं ।

+0

में कार्य 2 के साथ कार्य 1 की निर्भरता को हटा दें धन्यवाद धन्यवाद यह ठीक काम कर रहा है। – Reji

+1

थोड़ा सा विषय हो सकता है लेकिन क्या यह हो सकता है कि getStatus() रिटर्न हो रहा है यदि एक AsyncTask पहले से रद्द कर दिया गया है ओओ? कम से कम यही मैं अभी प्राप्त कर रहा हूं, मेरे AsyncTask को रद्द करने के बावजूद (जब तक कि एक ही कार्य किसी भी तरह से स्वत: पुनर्जीवित नहीं किया जा रहा हो)। – AgentKnopf

+0

@Zainodis - 'AsyncTask.getStatus()' वास्तव में 'रद्द करने' के बाद 'रनिंग' वापस कर सकता है और 'सत्य' लौटाता है। उदाहरण के लिए, 'रद्द करें() 'कॉल को अंतर्निहित थ्रेड पर' इंटरप्ट()' पर कॉल किया जा सकता है या 'AsyncTask' के लिए' isCancelled() 'ध्वज सेट कर सकता है, लेकिन' AsyncTask 'की स्थिति जीती' टी अंतर्निहित धागे को तब तक बदलता है जब तक कि फ्लैग वैल्यू में बाधा या परिवर्तन नहीं होता है और वास्तव में बाहर निकलता है। यही कारण है कि दस्तावेज़ अनुशंसा करते हैं कि 'doInBackground() 'को समय-समय पर' isCancelled() 'के मान की जांच करनी चाहिए और" जितनी जल्दी हो सके कार्य को समाप्त करें। " –

1

क्योंकि आप task1 की स्थिति सही होने के बाद आप इसे प्रारंभ मिलता है यही कारण है कि - आप पहली बार किसी के onPostExecute() से दूसरे AsyncTask कॉल करने के लिए, handler या किसी अन्य तरीके का उपयोग कर की जरूरत है।

+0

धन्यवाद व्लादिमीर ठीक काम कर रहे हैं – Reji

+2

चूंकिPostExecute ईवेंट थ्रेड पर चलता है, इसलिए हैंडलर का उपयोग करने की कोई आवश्यकता नहीं है। –

0

AsyncTask विधि को अवरुद्ध कर रहा है। फिर आप task1.get() और फिर task2.execute() भी लिख सकते हैं। इस तरह, आप कार्य 1 के साथ AsyncTask कार्यान्वयन

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