por que, como e quais parâmetros são passados para Asynctask <>, veja os detalhes aqui . Acho que é a melhor explicação.
A documentação do Android do Google diz que:
Uma tarefa assíncrona é definida por 3 tipos genéricos, chamados Params, Progress e Result, e 4 etapas, chamadas onPreExecute, doInBackground, onProgressUpdate e onPostExecute.
Tipos genéricos de AsyncTask:
Os três tipos usados por uma tarefa assíncrona são os seguintes:
Params, o tipo dos parâmetros enviados para a tarefa na execução. Progresso, o tipo de unidades de progresso publicadas durante o cálculo em segundo plano. Resultado, o tipo de resultado do cálculo em segundo plano. Nem todos os tipos são sempre usados por uma tarefa assíncrona. Para marcar um tipo como não utilizado, basta usar o tipo Void:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
Você pode consultar mais: http://developer.android.com/reference/android/os/AsyncTask.html
Ou você pode esclarecer qual é a função de AsyncTask consultando o blog de Sankar-Ganesh
Bem, a estrutura de uma classe AsyncTask típica é assim:
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
Este método é executado antes de iniciar o novo Thread. Não há valores de entrada / saída, então apenas inicialize as variáveis ou o que você achar que precisa fazer.
protected Z doInBackground(X...x){
}
O método mais importante da classe AsyncTask. Você tem que colocar aqui todas as coisas que deseja fazer em segundo plano, em um tópico diferente do principal. Aqui temos como valor de entrada um array de objetos do tipo “X” (Você vê no cabeçalho? Temos “... extends AsyncTask” Estes são os TIPOS dos parâmetros de entrada) e retorna um objeto do tipo “Z”.
protected void onProgressUpdate (Y y) {
} Este método é chamado com o método publishProgress (y) e geralmente é utilizado quando você deseja mostrar qualquer progresso ou informação na tela principal, como uma barra de progresso mostrando o progresso da operação que você está fazendo em segundo plano.
protected void onPostExecute (Z z) {
} Este método é chamado depois que a operação em segundo plano é concluída. Como parâmetro de entrada, você receberá o parâmetro de saída do método doInBackground.
E quanto aos tipos X, Y e Z?
Como você pode deduzir da estrutura acima:
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.
Como chamamos essa tarefa de uma classe externa? Apenas com as duas linhas a seguir:
MyTask myTask = new MyTask();
myTask.execute(x);
Onde x é o parâmetro de entrada do tipo X.
Assim que tivermos nossa tarefa em execução, podemos descobrir seu status “de fora”. Usando o método “getStatus ()”.
myTask.getStatus (); e podemos receber o seguinte status:
RUNNING - indica que a tarefa está em execução.
PENDENTE - Indica que a tarefa ainda não foi executada.
FINISHED - indica que onPostExecute (Z) terminou.
Dicas sobre como usar AsyncTask
Não chame os métodos onPreExecute, doInBackground e onPostExecute manualmente. Isso é feito automaticamente pelo sistema.
Você não pode chamar uma AsyncTask dentro de outra AsyncTask ou Thread. A chamada do método execute deve ser feita no UI Thread.
O método onPostExecute é executado no UI Thread (aqui você pode chamar outra AsyncTask!).
Os parâmetros de entrada da tarefa podem ser um array de objetos, desta forma você pode colocar quaisquer objetos e tipos que desejar.