क्यों, कैसे और कौन से पैरामीटर Asynctask <> के लिए दिए गए हैं, यहां विस्तार से देखें । मुझे लगता है कि यह सबसे अच्छा स्पष्टीकरण है।
Google का Android दस्तावेज़ कहता है कि:
एक एसिंक्रोनस कार्य को 3 सामान्य प्रकारों द्वारा परिभाषित किया जाता है, जिन्हें Params, Progress and Result, और 4 चरण, onPreExecute, doInBackground, onProgressUpdate और onPostExecute कहा जाता है।
AsyncTask के सामान्य प्रकार:
अतुल्यकालिक कार्य द्वारा उपयोग किए जाने वाले तीन प्रकार निम्नलिखित हैं:
परिम, निष्पादन पर टास्क के लिए भेजे गए मापदंडों के प्रकार। प्रगति, पृष्ठभूमि संगणना के दौरान प्रकाशित प्रगति इकाइयों का प्रकार। परिणाम, पृष्ठभूमि गणना के परिणाम का प्रकार। सभी प्रकार हमेशा एक अतुल्यकालिक कार्य द्वारा उपयोग नहीं किए जाते हैं। अप्रयुक्त के रूप में एक प्रकार को चिह्नित करने के लिए, बस टाइप करें शून्य का उपयोग करें:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
आप आगे उल्लेख कर सकते हैं: http://developer.android.com/reference/android/os/AsyncTask.html
या आप शंकर-गणेश के ब्लॉग को संदर्भित करके AsyncTask की भूमिका को स्पष्ट कर सकते हैं
अच्छी तरह से एक विशिष्ट AsyncTask वर्ग की संरचना इस प्रकार है:
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
नया थ्रेड प्रारंभ करने से पहले इस विधि को निष्पादित किया जाता है। कोई इनपुट / आउटपुट मान नहीं है, इसलिए केवल चर या जो कुछ भी आपको लगता है कि आपको करने की आवश्यकता है, आरंभ करें।
protected Z doInBackground(X...x){
}
AsyncTask क्लास में सबसे महत्वपूर्ण तरीका। आपको पृष्ठभूमि के मुख्य भाग से अलग थ्रेड में, वह सब सामान रखना होगा जो आप पृष्ठभूमि में करना चाहते हैं। यहां हमारे पास "X" प्रकार की वस्तुओं का एक इनपुट मान है (क्या आप हेडर में देखते हैं? हमारे पास "... AsyncTask का विस्तार है" ये इनपुट मापदंडों के प्रकार हैं) और प्रकार से एक वस्तु लौटाते हैं "Z"।
संरक्षित शून्य onProgressUpdate (Y y) {
} इस विधि को विधि publishProgress (y) का उपयोग करके कहा जाता है और इसका उपयोग आमतौर पर तब किया जाता है जब आप किसी प्रगति या जानकारी को मुख्य स्क्रीन में दिखाना चाहते हैं, जैसे कि प्रगति बार जो आप पृष्ठभूमि में कर रहे हैं उसकी प्रगति दिखा रही है।
संरक्षित शून्य onPostExecute (Z z) {
} बैकग्राउंड में ऑपरेशन के बाद इस विधि को कहा जाता है। एक इनपुट पैरामीटर के रूप में आपको doInBackground विधि का आउटपुट पैरामीटर प्राप्त होगा।
X, Y और Z प्रकार के बारे में क्या?
जैसा कि आप उपरोक्त संरचना से घटा सकते हैं:
X – The type of the input variables value you want to set to the background process. This can be an array of objects.
Y – The type of the objects you are going to enter in the onProgressUpdate method.
Z – The type of the result from the operations you have done in the background process.
हम बाहर के वर्ग से इस कार्य को कैसे कहते हैं? बस निम्नलिखित दो पंक्तियों के साथ:
MyTask myTask = new MyTask();
myTask.execute(x);
जहाँ X, X प्रकार का इनपुट पैरामीटर है।
एक बार जब हमारा कार्य चल जाता है, तो हम "बाहर" से इसकी स्थिति का पता लगा सकते हैं। "GetStatus ()" विधि का उपयोग करना।
myTask.getStatus (); और हम निम्नलिखित स्थिति प्राप्त कर सकते हैं:
रनिंग - इंगित करता है कि कार्य चल रहा है।
PENDING - इंगित करता है कि कार्य अभी तक निष्पादित नहीं किया गया है।
समाप्त - इंगित करता है कि onPostExecute (Z) समाप्त हो गया है।
AsyncTask का उपयोग करने के बारे में संकेत
OnPreExecute, doInBackground और onPostExecute को मैन्युअल रूप से कॉल न करें। यह स्वचालित रूप से सिस्टम द्वारा किया जाता है।
आप किसी अन्य AsyncTask या थ्रेड के अंदर एक AsyncTask कॉल नहीं कर सकते। यूआई थ्रेड में विधि निष्पादित की कॉल किया जाना चाहिए।
OnPostExecute को UI थ्रेड में निष्पादित किया गया है (यहां आप एक और AsyncTask कॉल कर सकते हैं!)।
कार्य के इनपुट पैरामीटर ऑब्जेक्ट सरणी हो सकते हैं, इस तरह से आप जो भी वस्तुएं और प्रकार चाहते हैं, डाल सकते हैं।