Android – Carregando dados com Loaders● Motivação:➔  Organização das Threads no Android➔  UI Thread e operações longas➔  O...
ApresentaçãoFernando Camargo:●   Graduando do curso de Engenharia de Computação na    UFG●   Estuda Java desde 2009 e Andr...
Motivação●   Como são organizadas as threads no Android?●   Qual thread é responsável pela criação da interface com o    u...
Organização das ThreadsA organização das threads no sistema Android é bemsimples:●   UI ThreadThread principal e única res...
UI Thread e operações longasToda e qualquer operação longa (interações com o bancode dados e a internet, por exemplo) deve...
Operações longas em outras threadsTodas as operações longas devem ser feitas em outrasthreads. Porém, tais threads não pod...
HandlerCria-se uma nova thread para executar a operação longa.Ao fim da mesma, usa-se o handler para se comunicar coma UI ...
runOnUiThread(Runnable)Método de Activity que pode ser chamado por outra thread.Passa-se um Runnable que será executado na...
AsyncTaskUma forma mais simples de executar tarefas em segundo plano efazer atualizações na tela. Seu uso substitui o uso ...
AsyncTask (2)O desenvolvedor deve estender essa classeimplementando pelo menos o método doInBackground.Com uma instância d...
Vida sem os LoadersEssas dumas formas de executar operações longas emoutra thread e atualizar a tela (em especial AsyncTas...
Introdução aos LoadersForam introduzidos no Android 3.0 e portados através deuma biblioteca de compatibilidade para versõe...
LoaderManagerGerenciador dos Loaders de uma determinada Activity ouFragment. Ajuda a aplicação a gerenciar operações longa...
LoaderCallbacksUma interface a ser implementada e passada para oLoaderManager no momento da (re)inicialização de umLoader....
LoaderClasse abstrata que realiza carregamento assíncrono dedados. Enquanto ativos, também devem monitorar a fontede dados...
CursorLoaderJá existe implementada a classe CursorLoader, subclassede AsyncTaskLoader. Através dela, pode-se usar Loadersc...
PráticaAplicativo de leitura de contatos cadastrados no Aplicativoapresentado anteriormente. Esse aplicativo será bemsimpl...
Próximos SlideShares
Carregando em…5
×

Android carregando dados com loaders

1.194 visualizações

Publicada em

Apresentado no Pré Startup Weekend 2012 promovido pelo GDG de Goiás. O código fonte pode ser encontrado no seguinte repositório SVN: https://subversion.assembla.com/svn/gdggoiascode/

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.194
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
13
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Android carregando dados com loaders

  1. 1. Android – Carregando dados com Loaders● Motivação:➔ Organização das Threads no Android➔ UI Thread e operações longas➔ Operações longas em outras threads● Vida sem os Loaders● Introdução aos Loaders● Prática
  2. 2. ApresentaçãoFernando Camargo:● Graduando do curso de Engenharia de Computação na UFG● Estuda Java desde 2009 e Android desde o início de 2012● OCJP 6● Desenvolve para Java EE, Android e Grails● Fazendo estágio na Fibonacci Soluções Ágeis
  3. 3. Motivação● Como são organizadas as threads no Android?● Qual thread é responsável pela criação da interface com o usuário?● Qual é a diferença dela para threads comuns?● Outras threads podem modificar a interface com o usuário?● O que acontece quando a thread responsável por tal interface fica muito tempo em uma operação longa?● Como rodar operações longas e modificar a interface com o usuário de forma segura?
  4. 4. Organização das ThreadsA organização das threads no sistema Android é bemsimples:● UI ThreadThread principal e única responsável por construção eatualização da tela. Todo o ciclo de vida de uma Activity rodanessa thread. Nenhuma outra thread pode modificar a tela.● Demais threadsGeralmente lançadas para executar tarefas em paralelo. Nãopode fazer qualquer modificação na tela.
  5. 5. UI Thread e operações longasToda e qualquer operação longa (interações com o bancode dados e a internet, por exemplo) deve ser evitada na UIThread, pois pode causar travamento e ANRs (ApplicationNot Responding).
  6. 6. Operações longas em outras threadsTodas as operações longas devem ser feitas em outrasthreads. Porém, tais threads não podem alterar a tela.Então como podemos atualizá-la ao fim da operação?● Handler● runOnUiThread(Runnable)● AsyncTask● Loaders
  7. 7. HandlerCria-se uma nova thread para executar a operação longa.Ao fim da mesma, usa-se o handler para se comunicar coma UI Thread, para que essa faça as atualizações na tela.Devido à sua complexidade, não é amplamente usado.
  8. 8. runOnUiThread(Runnable)Método de Activity que pode ser chamado por outra thread.Passa-se um Runnable que será executado na UI Thread.
  9. 9. AsyncTaskUma forma mais simples de executar tarefas em segundo plano efazer atualizações na tela. Seu uso substitui o uso doscomplicados Handlers.Trata-se de uma classe abstrata com os seguintes métodos aserem implementados:● onPreExecute: Executado na UI Thread antes da execução da tarefa.● doInBackground: Executado em segundo plano por outra thread.● onPostExecute: Executado após a execução da tarefa na UI Thread. Geralmente usado para atualizar a tela.
  10. 10. AsyncTask (2)O desenvolvedor deve estender essa classeimplementando pelo menos o método doInBackground.Com uma instância dessa subclasse, deve-se chamar ométodo run. Também é possível cancelar a tarefa usando ométodo cancel.
  11. 11. Vida sem os LoadersEssas dumas formas de executar operações longas emoutra thread e atualizar a tela (em especial AsyncTask), sãoótimas. Mas e quando precisamos especificamente carregare monitorar uma fonte de dados que alimentará nossaaplicação?Com AsyncTask, teríamos uma tarefa responsável porcarregar os dados e outra para monitorar as modificaçõesno mesmo, sendo que essa deveria ser reinicializada apósseu término.Implementar isso pode ser complicado e possuir erros.
  12. 12. Introdução aos LoadersForam introduzidos no Android 3.0 e portados através deuma biblioteca de compatibilidade para versões anteriores.Tornam fácil o carregamento de dados em Activitys eFragments (esse não será apresentado aqui).● Fornecem carregamento assíncrono de dados.● Monitoram a fonte de dados e entregam novos resultados quando o conteúdo muda.● Reconectam automaticamente quando há uma mudança de configurações (quando o usuário vira o smartphone, por exemplo).
  13. 13. LoaderManagerGerenciador dos Loaders de uma determinada Activity ouFragment. Ajuda a aplicação a gerenciar operações longasem conjunção com o ciclo de vida de seu(sua) respectivo(a)Activity ou Fragment.Com a biblioteca de compatibilidade, pode ser obtido atravésdo método getSupportLoaderManager(), presente na classeFragmentActivity.Os Loaders são iniciados através de seu método initLoadere reiniciados através de seu método restartLoader. UmLoader também pode ser recuperado através do métodogetLoader.
  14. 14. LoaderCallbacksUma interface a ser implementada e passada para oLoaderManager no momento da (re)inicialização de umLoader. Os métodos dessa interface rodaram na UI Thread.● onCreateLoader: Método responsável por retornar uma instância de Loader a ser usado pelo LoaderManager.● onLoadFinished: Método chamado após a chegada de novos resultados. Geralmente usado para atualizar a tela com os novos dados.● onLoaderReset: Método onde se deve limpar os dados previamente carregados pelo Loader, pois tais dados ficarão indisponíveis.
  15. 15. LoaderClasse abstrata que realiza carregamento assíncrono dedados. Enquanto ativos, também devem monitorar a fontede dados e entregar novos resultados quando o conteúdomudar.Geralmente, deve-se criar uma subclasse da classeAsyncTaskLoader (classe que utiliza AsyncTask pararealizar o carregamento e monitoramento em outra thread).Uma subclasse de AsyncTaskLoader pode sobrescrever osmétodos: loadInBackground, deliverResult,onStartLoading, onStopLoading, onCanceled, onReset,entre outros.
  16. 16. CursorLoaderJá existe implementada a classe CursorLoader, subclassede AsyncTaskLoader. Através dela, pode-se usar Loaderscom Cursor de um banco de dados sem se preocupar emcriar uma subclasse de Loader. O monitoramento de dadosé feito através de um Observer que observa notificações doContent Provider.
  17. 17. PráticaAplicativo de leitura de contatos cadastrados no Aplicativoapresentado anteriormente. Esse aplicativo será bemsimples e fará o seguinte:● Apresentará uma tela de login para o usuário logar em sua conta.● Se comunicará com um webservice para fazer autenticação.● Possuirá um Loader que se comunicará com um webservice para carregar os contatos.

×