आम तौर पर हम एक ही कक्षा में AsyncTask
जगह बनाने के लिए इसे और अधिक स्पष्ट है कि यह केवल एक ही गतिविधि द्वारा प्रयोग किया जाता है।
यदि आप चाहते हैं कि AsyncTask
टोबे से एक से अधिक गतिविधि के द्वारा पुन: उपयोग किया, तो आप बस एक स्वतंत्र वर्ग बना सकते हैं और निर्माताओं द्वारा गतिविधि से पैरामीटर पारित कर सकते हैं
आप अपने asyncTask को asynctask से प्रतिक्रिया भेजने के लिए इंटरफ़ेस बना सकते हैं आपकी गतिविधि नीचे की तरह है और जब भी आवश्यक हो, आपको लिस्टर विधि कॉल करें।मैं इसे onPostExecute()
कहा जाता है:
public class DeckDownloader extends AsyncTask<Void, Void, String> {
OnDownloadUpdateListener listener;
public interface OnDownloadUpdateListener {
public void OnDownloadDeckFinish(String Response);
}
public DeckDownloader(Context ctx, OnDownloadUpdateListener listener) {
mContext = ctx;
this.listener = listener;
}
@Override
protected String doInBackground(Void... params) {
String str = "downloading";
//your async code goes here
return str;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
if(listener != null) {
listener.OnDownloadDeckProgress(result);
}
}
}
और आपके गतिविधि कक्षा में, आपको लगता है कि श्रोता को लागू करने और है कि कार्यान्वयन विधि में TextView अद्यतन करने के लिए अपने कोड लिखने की जरूरत है:
public class myActivity extends Activity{
private DeckDownloader.OnDownloadUpdateListener downloadListener;
TextView txtAsyncResponse;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
txtAsyncResponse = (TextView) findViewById(R.id.txtAsyncResponse);
downloadListener = new DeckDownloader.OnDownloadUpdateListener() {
@Override
public void OnDownloadDeckFinish(String Response) {
txtAsyncResponse.setText(Response);
}
};
}
और आप नीचे दिए गए कोड लिख सकते हैं अपनी गतिविधि में AsyncTask शुरू करने के लिए जब भी वरना बटन क्लिक करें घटना की तरह आवश्यक
DeckDownloader mTask = new DeckDownloader(this.getApplicationContext(), downloadListener);
mTask.execute();
यह thindg आप चाहते हो सकता है!
स्रोत
2013-03-14 13:05:00
आप AsyncTask से runOnUIThread को क्यों कॉल करना चाहते हैं? TextViews को बदलने के लिए – EvilDuck
, उन्हें अन्य धागे से बदला नहीं जा सकता है। – Alex
आप यूपी को ऑनस्ट को अपडेट कर सकते हैं और PEEExecute –