quarta-feira, 4 de março de 2015

Atenção: OAuth mudanças

  Como já anunciado, o OAuth na versão antiga vai ser descontinuado.

  Para quem usa o OAuthConfig para API da Google (Drive, Calendar, etc) a data de corte será 20/04/2015, para outros (Twitter), 26/06/2015.
  Foram criados duas bibliotecas, uma APIs não-Google e outra para os da Google, respectivamente: OAuth1 e OAuth2 for Apps Script. 

Abraços

quarta-feira, 25 de fevereiro de 2015

Algoritmo de sort com bug, está no Java, Python e Android

  Um algoritmo de sort (TimSort) usado em Java, Python e no Android contém um bug. Foi descoberto por Stijn de Gouw e outros pesquisadores.
  Stijn de Gouw publicou detalhes no link abaixo. Lá contém o erro, as explicações e a correção.
  Eles usaram técnicas avançadas da ciência da computação chamadas como métodos formais.
  Se você já teve um java.lang.ArrayIndexOutOfBoundsException num sort, provavelmente foi esse bug.
  Vale uma leitura detalhada no post.

http://envisage-project.eu/proving-android-java-and-python-sorting-algorithm-is-broken-and-how-to-fix-it/

  Abraços

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