terça-feira, 12 de junho de 2018

Rumo ao Certificado Android: Async Task - Criando novas threads

Como dito anteriormente, uma requisição WEB não pode ser feita na thread principal do aplicativo. Isso ocorre porque o app precisaria ficar em um estado suspenso enquanto a requisição não fosse concluída, fazendo com que o programa não respondesse. Para evitar isso, precisamos criar uma thread secundária, que irá fazer o manejamento da requisição, enquanto que a thread principal continuará com a interação do usuário.

Para isso, podemos criar uma AsyncTask. Para isso, podemos criar uma classe que vá herdar a classe AsyncTask com três parâmetros: Params, Progress, Result. Abaixo temos um exemplo de código:

public class ActivityAsyncTask extends AsyncTask <URL, void, String>{

}

No código acima, estamos criando uma AsyncTask cujo parâmetros são:

  • Um objeto URL como parâmetros gerais;
  • Nada para gerenciamento de progresso;
  • Uma String como resultado;
O próximo passo será definir o método "doInBackground", como mostra abaixo:


public class ActivityAsyncTask extends AsyncTask <URL, void, String>{

    @Override
    protected String doInBackground(URL... urls){

    }

}

Note que o parâmetro do método doInBackground vai depender do que for passado na hora da definição da herança, neste caso, se definiu que na parte de parâmetros gerais, você deve passar URL, o parâmetro do método vai pedir para passar um array de URLs. Também observe que o retorno bate com o terceiro elemento definido, ou seja, uma String.
Mas o mais importante, o que faz este método? Este é o método principal para a nova thread. É aquela que vai ser executada em outra thread, logo, se quisermos fazer uma requisição HTTP, seria aqui que nós executaria essa requisição.

Uma vez que o processo seja concluído, o método onPostExecute será executado, recebendo o que for retornado no método doInBackground. É aqui que você definirá o que deve ser feito com o resultado:

public class ActivityAsyncTask extends AsyncTask <URL, void, String>{

    @Override
    protected void onPostExecute(String result){

    }

}

Claro que o algoritmo não vai executar sem ser chamado. Para isso, onde você desejar iniciar o processo, você instanciará um objeto da classe AsyncTask que você criou e executará o comando execute. Exemplo:

public void randomMethod(URL url){
  new ActivityAsyncTask().execute(url);
}

Por hoje é tudo.

Nenhum comentário:

Postar um comentário