segunda-feira, 5 de novembro de 2012

Onde usar Threads, na Activity ou num Service?


No Android toda vez que você tiver uma tarefa potencialmente demorada a recomendação é que se use uma outra Thread para processá-la.
Para isso nós temos várias alternativas para escolher como fazer.
Podemos usar uma Thread diretamente, podemos usar uma AsyncTask, podemos usar um Service (com thread), etc.
Para escolher uma opção, temos que levar em conta alguns critérios técnicos*.
- O ciclo de vida da tarefa.
- A volatilidade das informações.
- A duração da tarefa

Tudo se resume entre escolher entre uma Thread na Activity ou num Service
   1. Se o ciclo de vida da tarefa for além do ciclo de vida da Activity, devemos escolher um Service (started)
      Se não, podemos escolher um Service (bounded), uma AsyncTask ou uma Thread.
   2. Se as informações tiverem sentido apenas durante o uso da Activity
      Se as informações deverão ser salvas em arquivo ou db
   3. A duração da tarefa, uma tarefa pode demorar segundos (ou menos), minutos ou horas!
      Para tarefas com duração de (poucos) segundos, podemos usar Thread ou AsyncTask diretamente na Activity, nos outros casos use um Service.

Mas cada caso é um caso! Então precisamos analisar cuidadosamente qual opção atende melhor a nossa situação específica.
Para finalizar, não devemos nos esquecer do tratamento do encerramento da nossa tarefa.
E a experiência nos diz que tudo que pode demorar, pode ser passível de cancelamento por parte do usuário ou do próprio sistema.
Mas isso é outro assunto...

* não estamos considerando aqui a quantidade de tarefas e a possibilidade de paralelização, quando um pool de threads poderia ser uma opção.

PS: Temos novas opções: usar threads em fragments: um exemplo neste post

2 comentários: