{

title : "My Cyber-Space",

description : "O seu lugar de tecnologia",

author : "Victor Oliveira"

}


domingo, 25 de maio de 2014

JavaFX AsyncTask: Um jeito fácil de manusear threads com JavaFX

Minha primeira aplicação profissional foi um aplicativo JavaFX que deveria se comunicar com um servidor remoto e fazer operações normais como login, requisições, downloads de arquivos e etc. Foi aí que eu comecei a descobrir o mundo das threads e quão complicado ele é.

Em aplicações web é muito comum que as principais operações de concorrência sejam controladas pelo servidor de aplicação, o que ocorre em aplicações desktop e mobile é diferente, você mesmo deve gerenciar todas as suas threads inclusive a de User Interface.

No android por exemplo, é proibido realizar operações de requisição web na thread principal pois como existe a latência na rede, a espera pela resposta pode fazer com que a thread principal trave e a aplicação pare de responder. Para isso eles criaram uma classe chamada AsyncTask que nada mais é de uma classe que deve ser herdada e seus três métodos principais implementados para abstrair o problema de gerenciamento de threads.

Após experienciar alguns problemas parecidos na minha aplicações JavaFX (você pode ver no Stack Overflow aqui, aqui e aqui) eu resolvi implementar algo parecido com o que o android disponibilizava para o JavaFX.

Como funciona??

A AsyncTask é uma classe com 4 métodos abstratos:
  1. onPreExecute - Esse método é executado pela UI thread e deve ser utilizado para rodar rotinas antes de sua tarefa background ser iniciada. Por exemplo, informar ao usuário que um download irá ser iniciado.
  2. doInBackground - Esse método é onde a operação será de fato realizada em outra thread, sem travar a UI.
  3. onPostExecute - Esse método é executado pela UI thread logo após sua rotina que foi executada em background acabar. Serve, por exemplo, para informar ao usuário uma mensagem de sucesso ou erro.
  4. progressCallback - Se for necessário mostrar o progresso durante a tarefa, esse método deve implementar o callback que atualiza a UI com informações pro usuário, por exemplo, incrementando uma barra de progresso.

Existem ainda outros 4 métodos:
  1. publishProgress - É o método que irá chamar o progressCallback, normalmente implementado dentro de um laço para poder publicar o progresso da tarefa.
  2. setDaemon - É usado para setar se a thread é daemon ou não, ou seja, se ela irá morrer junto com o termino da aplicação ou não. Deve ser usada antes do método execute;
  3. execute - É o método que iniciará todo o processo.
  4. interrupt - Usado para interromper a thread

Vocês podem baixar, e contribuir na página do JavaFX AsyncTask no GitHub 

Nenhum comentário: