perché, come e quali parametri vengono passati ad Asynctask <>, vedere i dettagli qui . Penso che sia la migliore spiegazione.
La documentazione Android di Google afferma che:
Un'attività asincrona è definita da 3 tipi generici, chiamati Params, Progress e Result, e 4 passaggi, chiamati onPreExecute, doInBackground, onProgressUpdate e onPostExecute.
Tipi generici di AsyncTask:
I tre tipi utilizzati da un'attività asincrona sono i seguenti:
Params, il tipo di parametri inviati all'attività al momento dell'esecuzione. Avanzamento, il tipo di unità di avanzamento pubblicate durante il calcolo in background. Risultato, il tipo di risultato del calcolo in background. Non tutti i tipi vengono sempre utilizzati da un'attività asincrona. Per contrassegnare un tipo come non utilizzato, usa semplicemente il tipo Void:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
Puoi ulteriormente fare riferimento: http://developer.android.com/reference/android/os/AsyncTask.html
Oppure puoi chiarire qual è il ruolo di AsyncTask facendo riferimento al blog di Sankar-Ganesh
Bene La struttura di una tipica classe AsyncTask è simile a:
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
Questo metodo viene eseguito prima di avviare il nuovo thread. Non ci sono valori di input / output, quindi inizializza semplicemente le variabili o qualsiasi altra cosa pensi di dover fare.
protected Z doInBackground(X...x){
}
Il metodo più importante nella classe AsyncTask. Devi mettere qui tutte le cose che vuoi fare in background, in un thread diverso da quello principale. Qui abbiamo come valore di input un array di oggetti del tipo "X" (Vedi nell'intestazione? Abbiamo "... extends AsyncTask" Questi sono i TIPI dei parametri di input) e restituisce un oggetto del tipo “Z”.
protected void onProgressUpdate (Y y) {
} Questo metodo viene chiamato utilizzando il metodo publishProgress (y) e di solito viene utilizzato quando si desidera mostrare qualsiasi progresso o informazione nella schermata principale, come una barra di avanzamento che mostra lo stato di avanzamento dell'operazione che si sta eseguendo in background.
protected void onPostExecute (Z z) {
} Questo metodo viene chiamato al termine dell'operazione in background. Come parametro di input riceverai il parametro di output del metodo doInBackground.
E i tipi X, Y e Z?
Come puoi dedurre dalla struttura sopra:
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.
Come chiamiamo questo compito da una classe esterna? Solo con le seguenti due righe:
MyTask myTask = new MyTask();
myTask.execute(x);
Dove x è il parametro di input del tipo X.
Una volta che abbiamo il nostro compito in esecuzione, possiamo scoprire il suo stato da "fuori". Utilizzando il metodo "getStatus ()".
myTask.getStatus (); e possiamo ricevere il seguente stato:
IN ESECUZIONE: indica che l'attività è in esecuzione.
PENDING - Indica che l'attività non è stata ancora eseguita.
FINISHED - Indica che onPostExecute (Z) è terminato.
Suggerimenti sull'utilizzo di AsyncTask
Non chiamare manualmente i metodi onPreExecute, doInBackground e onPostExecute. Questa operazione viene eseguita automaticamente dal sistema.
Non è possibile chiamare un AsyncTask all'interno di un altro AsyncTask o Thread. La chiamata del metodo execute deve essere eseguita nel thread dell'interfaccia utente.
Il metodo onPostExecute viene eseguito nel thread dell'interfaccia utente (qui puoi chiamare un altro AsyncTask!).
I parametri di input dell'attività possono essere un array di oggetti, in questo modo puoi inserire qualsiasi oggetto e tipo desideri.