मुझे समझ में नहीं आ रहा है कि मैं यहाँ क्या करने वाला हूँ और ये तर्क कहाँ खत्म होते हैं? वास्तव में मुझे क्या करना चाहिए, और यह वास्तव में कहां जाएगा? क्या मुझे सभी 3 को शामिल करने की आवश्यकता है या क्या मैं 1,2,20 को शामिल कर सकता हूं?
मुझे समझ में नहीं आ रहा है कि मैं यहाँ क्या करने वाला हूँ और ये तर्क कहाँ खत्म होते हैं? वास्तव में मुझे क्या करना चाहिए, और यह वास्तव में कहां जाएगा? क्या मुझे सभी 3 को शामिल करने की आवश्यकता है या क्या मैं 1,2,20 को शामिल कर सकता हूं?
जवाबों:
Google का Android दस्तावेज़ कहता है कि:
एक अतुल्यकालिक कार्य को 3 सामान्य प्रकारों द्वारा परिभाषित किया जाता है, जिन्हें परम, प्रगति और परिणाम, और 4 चरण, onPreExecute, doInBackground, onProgressUpdate और onPostExecute कहा जाता है।
AsyncTask के सामान्य प्रकार:
अतुल्यकालिक कार्य द्वारा उपयोग किए जाने वाले तीन प्रकार निम्नलिखित हैं:
Params, the type of the parameters sent to the task upon execution.
Progress, the type of the progress units published during the background computation.
Result, the type of the result of the background computation.
सभी प्रकार हमेशा एक अतुल्यकालिक कार्य द्वारा उपयोग नहीं किए जाते हैं। अप्रयुक्त के रूप में एक प्रकार को चिह्नित करने के लिए, बस टाइप करें शून्य का उपयोग करें:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
आप आगे बता सकते हैं: http://developer.android.com/reference/android/os/AsyncTask.html
या आप शंकर-गणेश के ब्लॉग को संदर्भित करके AsyncTask की भूमिका को स्पष्ट कर सकते हैं
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
नया थ्रेड प्रारंभ करने से पहले इस विधि को निष्पादित किया जाता है। कोई इनपुट / आउटपुट मान नहीं है, इसलिए बस चर या जो कुछ भी आपको लगता है कि आपको करने की आवश्यकता है, आरंभ करें।
protected Z doInBackground(X...x){
}
AsyncTask क्लास में सबसे महत्वपूर्ण तरीका। आपको यहां वह सारी सामग्री रखनी होगी जो आप पृष्ठभूमि में करना चाहते हैं, मुख्य एक से अलग धागे में। यहां हमारे पास "X" प्रकार की वस्तुओं का एक इनपुट मान है (क्या आप हेडर में देखते हैं? हमारे पास "... AsyncTask का विस्तार है" ये इनपुट मापदंडों के प्रकार हैं) और प्रकार से एक वस्तु लौटाते हैं "Z"।
protected void onProgressUpdate(Y y){
}
इस विधि को विधि publishProgress (y) का उपयोग करके कहा जाता है और इसका उपयोग आमतौर पर तब किया जाता है जब आप किसी प्रगति या सूचना को मुख्य स्क्रीन में दिखाना चाहते हैं, जैसे कि प्रगति बार जो आप पृष्ठभूमि में कर रहे हैं, प्रगति दिखाती है।
protected void 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 कॉल कर सकते हैं!)।
कार्य के इनपुट पैरामीटर ऑब्जेक्ट सरणी हो सकते हैं, इस तरह से आप जो भी वस्तुएं और प्रकार चाहते हैं, डाल सकते हैं।
WeakAsyncTask
रूप में अच्छी तरह से के लिए एक प्रवाह बनाने की कोशिश करेंगे
एक AsyncTask
पृष्ठभूमि कार्य है जो पृष्ठभूमि थ्रेड में चलता है। यह एक इनपुट लेता है , प्रोग्रेस करता है और आउटपुट देता है ।
यानी
AsyncTask<Input,Progress,Output>
।
मेरी राय में भ्रम का मुख्य स्रोत तब आता है जब हम मापदंडों को याद करने की कोशिश करते हैं AsyncTask
।
कुंजी याद नहीं है ।
यदि आप कल्पना कर सकते हैं कि आपके कार्य को वास्तव में क्या करने की आवश्यकता है तो AsyncTask
सही हस्ताक्षर के साथ लिखना केक का एक टुकड़ा होगा।
बस यह पता करें कि आपका इनपुट , प्रोग्रेस और आउटपुट क्या है और आप जाना अच्छा होगा।
doInBackgound()
विधि एक में सबसे महत्वपूर्ण तरीका है AsyncTask
क्योंकि
AsyncTask
मापदंडों के साथ इसका हस्ताक्षर बदलता है ।तो रिश्ते को देखने देता है
doInBackground()
औरonPostExecute()
,onProgressUpdate()
भी संबंधित हैं
मुझे कोड दिखाएं
तो मैं DownloadTask के लिए कोड कैसे लिखूंगा?
DownloadTask extends AsyncTask<String,Integer,String>{
@Override
public void onPreExecute()
{}
@Override
public String doInbackGround(String... params)
{
// Download code
int downloadPerc = // calculate that
publish(downloadPerc);
return "Download Success";
}
@Override
public void onPostExecute(String result)
{
super.onPostExecute(result);
}
@Override
public void onProgressUpdate(Integer... params)
{
// show in spinner, access UI elements
}
}
इस टास्क को आप कैसे चलाएंगे
new DownLoadTask().execute("Paradise.mp3");
// show in spinner, access UI elements
सिर्फ onProgressUpdate(...)
:) के लिए सबसे सीधी व्याख्या के नीचे हाथ था
निम्नलिखित लिंक देखें:
आप तीन से अधिक तर्कों को पारित नहीं कर सकते, यदि आप केवल 1 तर्क पारित करना चाहते हैं तो अन्य दो तर्कों के लिए शून्य का उपयोग करें।
1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long>
2. protected class InitTask extends AsyncTask<Context, Integer, Integer>
एक अतुल्यकालिक कार्य एक संगणना द्वारा परिभाषित किया जाता है जो एक पृष्ठभूमि थ्रेड पर चलता है और जिसका परिणाम UI थ्रेड पर प्रकाशित होता है। एक अतुल्यकालिक कार्य को 3 सामान्य प्रकारों द्वारा परिभाषित किया जाता है, जिन्हें परम, प्रगति और परिणाम, और 4 चरण, onPreExecute, doInBackground, onProgressUpdate और onPostExecute कहा जाता है।
KPBird
शॉर्ट में, AsyncTask में 3 पैरामीटर हैं
DoInBackground (स्ट्रिंग ... परम) में इनपुट उपयोग के लिए पैरामीटर
OnProgressUpdate (स्ट्रिंग ... स्थिति) में प्रगति के उपयोग की स्थिति दिखाने के लिए पैरामीटर
OnPostExcute (स्ट्रिंग ... परिणाम) में परिणाम उपयोग के लिए पैरामीटर
नोट: - [मापदंडों का प्रकार आपकी आवश्यकता के आधार पर भिन्न हो सकता है]