In generale abbiamo collocare AsyncTask
in stessa classe per renderlo più chiaro che è usato da solo la stessa attività.
Se si desidera che AsyncTask
Tobe riutilizzato da più di un'attività che, si può semplicemente creare una classe indipendente e passare i parametri dall'attività dai costruttori
È possibile creare interfaccia nel AsyncTask per inviare risposta da AsyncTask a la tua attività come di seguito e ti chiamo metodo lister quando richiesto.L'ho chiamato 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);
}
}
}
E la classe di attività, è necessario attuare tale ascoltatore e scrivere il codice per aggiornare TextView in quel metodo di implementazione:
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);
}
};
}
E si può scrivere qui sotto code per iniziare AsyncTask nella vostra attività ogni volta richiesto come evento click del pulsante oppure
DeckDownloader mTask = new DeckDownloader(this.getApplicationContext(), downloadListener);
mTask.execute();
Questo può essere il thindg che vuoi!
fonte
2013-03-14 13:05:00
perché si desidera chiamare runOnUIThread da AsyncTask? – EvilDuck
per modificare le visualizzazioni di testo, non possono essere modificate da altri thread. – Alex
È possibile aggiornare l'interfaccia utente in onPostExecute e onPreExecute –