YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Portuguese, Brazilian subtitles

← App Lifecycle and Services - Developing Android Apps

Get Embed Code
10 Languages

Showing Revision 17 created 06/20/2016 by Udacity Robot.

  1. Na lição quatro aprendemos
    que o tempo de execução do Android
  2. descartará aplicativos sem
    atividades visíveis
  3. a fim de liberar os recursos
    necessários pelo aplicativo em primeiro plano.
  4. Mas, e se o aplicativo tiver tarefas
    que precisam prosseguir
  5. quando a atividade não estiver visível?
  6. Coisas como baixar arquivos,
    carregar fotos ou reproduzir música.
  7. Bem, existe um componente de aplicativo
    para isso.
  8. Serviços.
  9. Já introduzimos
    atividades, provedores de conteúdo,
  10. broadcast receivers e intenções.
  11. Serviços são a peça final
    no quebra-cabeça de componentes do aplicativo do Android.
  12. Você inicia serviços
    como inicia atividades,
  13. passando uma intenção
    para uma chamada startService.
  14. E você pode pará-los
    da mesma maneira.
  15. Ao chamar stopService
    e passar o nome
  16. do serviço
    que você quer parar.
  17. Diferentemente de atividades, serviços não têm
    interface do usuário
  18. e sua execução tem prioridade
    sobre as atividades de segundo plano.
  19. Isso significa que um aplicativo
    com um serviço em execução,
  20. tem menos probabilidade de ser descartado
    pelo tempo de execução
  21. a fim de liberar recursos
    para as atividades de primeiro plano.
  22. De fato, por padrão, o sistema
    tentará reiniciar os serviços
  23. que são finalizados antes
    que eles sejam interrompidos dentro do aplicativo.
  24. Isso se reflete neste
    ciclo de vida simplificado.
  25. Em comparação com atividades,
    serviços são designados
  26. para executar tarefas mais longas,
    que não devem ser interrompidas.
  27. Geralmente, só é necessário substituir
    o manipulador onStartCommad,
  28. que é onde começa
    a tarefa em segundo plano
  29. que você quer executar.
  30. Mas, observe que não há manipuladores
    para monitoramento de alterações no estado,
  31. a fim de refletir a movimentação do aplicativo
    para o segundo plano.
  32. Isso porque
    o próprio serviço de execução
  33. envia um sinal para o framework,
  34. de que o aplicativo contido deve
    ser considerado como de prioridade mais alta
  35. do que outros aplicativos em segundo plano
    que não têm serviços em execução.
  36. Em alguns casos, seu serviço
    pode estar executando uma tarefa,
  37. que embora não tenha IU,
    não pode ser interrompida
  38. sem interferir
    na experiência do usuário.
  39. Por exemplo, reproduzir música
    ou ajudar em navegação de carro por GPs.
  40. Nesses casos, você pode
    indicar que o servidor
  41. deve ser considerado
    para execução em primeiro plano,
  42. chamando startForeground.
  43. Você perceberá que essa chamada
    recebe uma notificação.
  44. Ela será exibida,
    e não poderá ser descartada
  45. até que o serviço seja parado
    ou você chame stopForeground.
  46. Você aprenderá mais sobre notificações
    um pouco mais adiante, com Dan.
  47. Mas por agora, observe que um serviço em primeiro plano
    tem a mesma prioridade de execução
  48. que uma atividade em primeiro plano.
  49. Tornando-o quase impossível
    de ser descartado pelo tempo de execução
  50. para liberar recursos.
  51. Agora, você deve estar pensando,
    eu poderia evitar muito problemas
  52. ao lidar com ciclos de vida,
    apenas criando serviços de longa execução
  53. ou até mesmo em primeiro plano.
  54. Bem, eu cresci
    na costa da Austrália,
  55. e aprendi desde cedo que
    nadar contra a corrente
  56. é desgastante e, em última análise, inútil.
  57. Nesse caso, significa
    tornar mais difícil
  58. para o sistema gerenciar recursos,
  59. levando, enfim,
    a uma experiência de usuário pior.
  60. Nade a favor da corrente.
  61. Use serviços em primeiro plano
    somente quando e enquanto
  62. absolutamente necessário.
  63. E pare todo o serviço
    o mais rapidamente possível.
  64. Também é importante observar
    que como atividades e receptores,
  65. serviços são executados no thread principal.
  66. Então, você terá de usar
    um thread em segundo plano ou pensar em uma tarefa
  67. para executar tarefas de longa duração
    que deseja executar no serviço.
  68. Para facilitar
    use a classe IntentService.
  69. Que implementa o padrão mais comum
    de melhores práticas, para o uso de intenções,
  70. que são executadas em um serviço.
  71. Isso cria uma fila de intenções de entrada,
    que são passadas quando StartService é chamado.
  72. Elas são, então, processadas sequencialmente
    em um thread em segundo plano,
  73. no manipulador onHandleIntent,
    dentro da implementação do serviço de intenção.
  74. Quando a fila fica vazia,
    o serviço se encerra
  75. até que uma nova intenção seja recebida,
    e o processo recomeça.
  76. Serviços são uma ferramenta poderosa
    e é importante entender
  77. como você pode usá-los,
  78. mas, na prática, sempre há
    um framework alternativo
  79. para rodar sua própria
    implementação de serviço.
  80. Seja um serviço de intenção
    para executar tarefas em segundo plano
  81. ou o adaptador de sincronização do qual
    falaremos mais adiante nesta lição.
  82. Perfeito para executar sincronização de dados
    em segundo plano.