आप एक interface
बनाने के लिए, AsyncTask
को इसे पारित (निर्माता में) कर सकते हैं, और फिर onPostExecute()
में विधि कॉल उदाहरण के लिए:
आपका इंटरफ़ेस:
public interface OnTaskCompleted{
void onTaskCompleted();
}
आपका गतिविधि:
public class YourActivity implements OnTaskCompleted{
// your Activity
}
एन घ अपने AsyncTask:
public class YourTask extends AsyncTask<Object,Object,Object>{ //change Object to required type
private OnTaskCompleted listener;
public YourTask(OnTaskCompleted listener){
this.listener=listener;
}
// required methods
protected void onPostExecute(Object o){
// your stuff
listener.onTaskCompleted();
}
}
संपादित
के बाद से इस सवाल का जवाब काफी लोकप्रिय हो गया है, मैं कुछ बातें जोड़ना चाहते हैं।
यदि आप एंड्रॉइड डेवलपमेंट के लिए नए हैं, तो AsyncTask
चीजों को यूआई थ्रेड को अवरुद्ध किए बिना काम करने का एक तेज़ तरीका है। यह वास्तव में कुछ समस्याओं को हल करता है, कक्षा में खुद कैसे काम करता है इसके साथ कुछ भी गलत नहीं है। हालांकि, यह कुछ प्रभाव लाता है, जैसे:
- मेमोरी लीक की संभावना। यदि आप अपने
Activity
का संदर्भ रखते हैं, तो उपयोगकर्ता स्क्रीन को छोड़ने के बाद भी स्मृति में रहेगा (या डिवाइस को घुमाएगा)।
AsyncTask
Activity
पर परिणाम नहीं दे रहा है यदि Activity
पहले से ही नष्ट हो गया था। आपको इन सभी चीजों को प्रबंधित करने के लिए अतिरिक्त कोड जोड़ना होगा या आप दो बार संचालन करेंगे।
- जटिल कोड जो
Activity
में सब कुछ करता है जब आपको लगे कि आप Android के साथ आगे बढ़ने के लिए, this article पर एक नज़र डालें, जो मुझे लगता है कि पर्याप्त परिपक्व, अपने Android ऐप्स के विकास के लिए जाने के लिए एक बेहतर तरीका है एसिंक्रोनस ऑपरेशंस के साथ।
स्रोत
2012-04-01 10:33:07
क्या एसिन्टास्क क्लास को मेनिफेस्ट फ़ाइल में लिखा जाना चाहिए? –
@AsafNevo नहीं, यह –
@Dmitry नहीं होना चाहिए, श्रोता के अलावा अन्य क्या श्रोता हमारे पास हो सकता है? PreExecute पर क्या है? – rxlky