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
domingo, 22 de fevereiro de 2015
sexta-feira, 20 de fevereiro de 2015
Android básico: Usando o onSaveInstanceState
Em algumas situações o sistema pode encerrar sua activity, seja por falta de recursos ou por mudança de orientação da tela. Nesses casos, o método onSaveInstanceState é chamado para permitir ao programador salvar algum dado da activity. O método é chamado com uma referencia a um bundle, nele é que se deve salvar o(s) dado(s). Quando a activity for recriada esse bundle é passado para o onCreate e onRestoreInstanceState.
Segue abaixo um esquema básico:
Salva o(s) dados(s):
Recupera o(s) dado(s), aqui:
Ou aqui:
Os dados da tela são salvos e restaurados automaticamente, por isso é fundamental chamar o método no super.
Lembrar que esse procedimento só deve ser usado para dados temporários (transitórios), pois são salvos em memória, correndo o risco de serem descartados.
Em caso de dados importantes, ou na dúvida, salve-os de maneira persistente.
Abraços
Segue abaixo um esquema básico:
Salva o(s) dados(s):
Recupera o(s) dado(s), aqui:
Ou aqui:
Os dados da tela são salvos e restaurados automaticamente, por isso é fundamental chamar o método no super.
Lembrar que esse procedimento só deve ser usado para dados temporários (transitórios), pois são salvos em memória, correndo o risco de serem descartados.
Em caso de dados importantes, ou na dúvida, salve-os de maneira persistente.
Abraços
Curso Android online
Este curso oferecido pelo Coursera é bem interessante:
Programação de aplicativos para dispositivos móveis com sistema Android: Part 1
Programação de aplicativos para dispositivos móveis com sistema Android: Part 2
O inglês do professor Adam Porter é bem fácil, compreensível.
É bom ter um nível intermediário de conhecimentos de programação Java e, apesar de não ser um pré-requisito, é interessante ter um nível introdutório em Android. Vai aproveitar mais.
Assisti todas as aulas da parte 1 e estou acompanhando a parte 2.
Gostei, recomendo.
Abraços
Assinar:
Postagens (Atom)