domingo, 22 de fevereiro de 2015

Cancelando uma AsyncTask

  Logo no início dos meus estudos testei a classe AsyncTask, vejo que é uma classe problemática para os desenvolvedores Android. Problema, no sentido de dificuldade de entendimento do seu funcionamento.
  Inclusive, o pessoal do Android ajudou um pouco nessa confusão. Quando foi disponibilizado, no Android 1.5 - Cupcake (API 3), a tarefa era executada em um única thread em background. Logo em seguida, nas versões 2.x (API 4 a 10) isso foi mudado para um pool de threads, permitindo que várias tarefas rodassem em paralelo. Para, voltar a executar sequencialmente, uma tarefa por vez, no Android 3.0 - Honeycomb (API 11). Isso para evitar erros de aplicativos causados por execução paralela. O problema não estava, evidentemente, na AsyncTask e sim em como as tarefas foram implementadas.
  Mas, isso é história. O objetivo desse post é retornar num exemplo que postei há muito tempo. Link abaixo. O objetivo é incluir uma forma de cancelar uma tarefa quando a activity entrar nos métodos onPause, onStop ou onDestroy. Escolher em qual (ou quais) método colocar o cancelamento vai depender de cada caso, no meu exemplo, coloco em todos.
  Para cancelar basta usar o método da AsyncTask cancel(true), na verdade, não é cancelado automaticamente, é solicitado um cancelamento. A tarefa em execução precisa ser passível de responder ao pedido de cancelamento. Na tarefa, o método isCancelled() é usado para checar se o cancelamento foi solicitado. É recomendado checar sempre antes de executar um processamento demorado.

  Segue o código que usei no post do link abaixo com as alterações:



  Faltou dizer que ao cancelar a AsyncTask, o método onPostExecute não será chamado, em seu lugar, o método onCancelled deve ser executado.

http://agorandroid.blogspot.com.br/2012/02/asynctask-e-progressdialog-ex04.html

 Abraços

Nenhum comentário:

Postar um comentário