Criando tarefas assíncronas

0

É muito comum ter que executar uma tarefa em segundo plano e exibir o retorno para o usuário quando a tarefa for concluída.

Referência

Para este tutorial, vamos aprender na prática como isso funciona e para deixar nosso tutorial com um aspecto realista, vamos criar um aplicativo que irá consultar um serviço REST informando o IP que deverá retornar algumas informações sobre este IP.

Lembrando que o objetivo aqui é mostrar o comportamento da classe AsyncTask e não fazer a interpretação dos dados. Para isso vamos entender como é seu comportamento.

O ciclo de vida da classe AsyncTask possui 4 passos que são executados conforme a figura abaixo:

asynctask
Segundo a descrição oficial do Google..

onPreExecute(): é chamado no segmento interface do usuário antes que a tarefa seja executada. Este passo é normalmente usado para configurar a tarefa, por exemplo, mostrando uma barra de progresso na interface do usuário.

doInBackground (Params …): é chamado no segmento de segundo plano imediatamente após onPreExecute() terminar a execução. Esta etapa é usada para executar algo que pode levar muito tempo. Os parâmetros são passados para este método. O resultado da tarefa deve ser devolvido por esta etapa e ser passado de volta para a última etapa. Nesta etapa também pode ser usado o método publishProgress(Progress …) para informar o valor do progresso da tarefa. Estes valores são publicados no segmento de interface do usuário, na etapa onProgressUpdate(Progress …).

onProgressUpdate(Progress …): é chamado no segmento de interface do usuário após uma chamada de publishProgress(Progress …). O momento da execução é indefinida. Este método é usado para exibir qualquer forma de progresso na interface do usuário, enquanto a tarefa ainda está em execução. Por exemplo, ela pode ser usada para animar uma barra de progresso ou mostrar os logs em um campo de texto.

onPostExecute(Result): é chamado no segmento de interface do usuário após a conclusão da tarefa. O resultado da tarefa é passado para este passo como um parâmetro.

Agora que já estudamos o comportamento da class AyncTask, vamos colocar a mão na massa.

1. Mão na massa

Crie um projeto novo e selecione o modelo Basic Activity.

Antes de iniciar precisamos configurar o ambiente, pois como iremos efetuar uma conexão com a internet para ler uma API (url) e para isso precisamos adicionar uma permissão no arquivo de manifesto (AndroidManifest.xml).

Acima da TAG application vamos adicionar o seguinte código:

Pronto, agora que temos a permissão para acesso a internet, vamos adicionar uma biblioteca no build.gradle a nível de módulo dentro da propriedade android. Esta biblioteca é necessária para utilizarmos a classe HttpURLConnection, responsável pela comunicação Http.

Antes de implementar o código vamos criar uma String no arquivo de Strings (strings.xml). Esta String será a URL da API com um detalhe muito interessante que é a passagem de parâmetro.

Em seguida vamos adicionar um EditText no layout onde será obtido o IP a ser consultado pelo usuário.

Agora que temos o ambiente configurado, layout pronto e String com parâmetro criada vamos por a mão na massa e criar uma classe chamada VerificarIPAsyncTask que será uma extensão (ou herança) da classe AsyncTask e nela vamos sobrescrever os 4 métodos referente as etapas que aprendemos na teoria, porém não vamos colocar ainda a implementação do código final. Vamos criar essa classe dentro do arquivo MainActivity.java (Activity principal).

Agora precisamos fazer a chamada da classe assíncrona. Esta chamada ocorrerá quando o Botão Suspenso (Floating Button) for pressionado e deverá passar como parâmetro o valor digitado no EditText.

Ao clicar no botão suspenso verificamos se o usuário digitou algo no EditText. Caso tenha digitado algo faremos a chamada da classe assíncrona passando como parâmetro (dentro do método execute) o valor do EditText, caso não tenha nada digitado pelo usuário, uma mensagem deverá ser exibida.

Já temos a classe assíncrona funcionando, porém nosso objetivo inicial era criar uma consulta de um serviço REST informando o IP que deveria retornar algumas informações sobre este IP, portanto, vamos realizar essa consulta utilizando a classe HttpURLConnection. Este é o modo primitivo de realizar essa tarefa, porém existem várias APIs como a Retrofit que facilita a nossa vida quando precisamos nos comunicar através do protocolo Http. Vamos observar como ficou a classe final.

2. Testando

Para testar o App, vamos utilizar o IP do site tutorialandroid.com.br (181.41.221.159).

Tela Inicial AsyncTask

Ao clicar no botão teremos o seguinte resultado.

Resultado AsyncTask

3. Código Completo

Código Fonte

Clique aqui para baixar o projeto completo.

Qualquer dúvida deixe seu comentário.

Share.

About Author

gorio

Engenheiro de Computação, com 6 anos de experiência e vivência no mundo de Sistemas Embarcados e Mobile.

Leave A Reply

*