O que são esses itens entre < > depois de AsyncTask , onde usamos?

Gente , já olhei um pouco de generics e listas mas em nenhum dos casos eu aprendi exatamente saber o que é isso e por que toda hora eu vejo desenvolvedores usando com “parâmetros” diferentes como vemos abaixo, isso me deixa confuso.

class AdulterioEscondido extends AsyncTask<Ricardao,Luiz,Motel> {  
   // bla bla bla   
}

ou

class AdulterioEscondido extends AsyncTask<Gay,Mulher,Motel> {  
   // bla bla bla   
}

ou
class AdulterioEscondido extends AsyncTask<Motel,Motel,Igreja> {
// bla bla bla
}

Afinal, qual o nome que se dá esse uso de <> depois do nome da classe ?
É um generic? E no caso do AsyncTask, pra que é usado?

Basicamente, o AsyncTask é feito para rodar tarefas em background para não onerar a performance da thread principal ou UI (user interface) ou mesmo travá-la. Exemplos de processamentos em background: baixar dados da internet, decodificar imagens, etc.

Quanto aos 3 parâmetros (arg1, arg2 e arg3)

  • arg1 - Tipo de dado que será utilizado como input do processamento (pode não ter nenhum ou pode ser mais de um)
  • arg2 - Tipo de dado que será retornado durante o processamento (se necessário. Ex: exibir progresso do processamento)
  • arg3 - Tipo de dado que será retornado após o processamento (pode não ter nenhum).

O método doInBackground() é onde você define o que será processado em background e precisa receber parâmetros do mesmo tipo definido em arg1 e retornar um valor do mesmo tipo definido em arg3. Os parâmetros são acessados pelo array param[]. Se só tiver um, por exemplo, será o param[0].

O método onPostExecute() pega o valor retornado pelo método acima (que é o argumento “result”) e repassa para a thread principal (UI), então você pode exibir uma mensagem com o dado, setar um TextView, exibir a imagem processada, etc.

Os outros 2 métodos são opcionais:

  • onPreExecute() - Se quiser fazer alguma coisa antes do processamento começar
  • onProgressUpdate() - retorna um valor intermediário para a UI do mesmo tipo definido em arg2. Opcional. Ex: status de progresso.

Uma vez definido tudo, só iniciar a execução. Ex:

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

DownloadFilesTask task = new DownloadFilesTask();
task.execute(url1, url2, url3);
Fonte: https://pt.stackoverflow.com/questions/214372/como-funciona-de-fato-o-asynctask
1 curtida