YouTube

Got a YouTube account?

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

Spanish, Mexican subtitles

← Ciclo de vida de la aplicación y servicios

Get Embed Code
10 Languages

Showing Revision 5 created 09/30/2014 by Fran Ontanaya.

  1. La lección 4 nos enseñó
    que Android Runtime cerrará las apps
  2. sin actividades visibles
    para poder liberar recursos
  3. necesarios para la app en primer plano.
  4. ¿Pero qué pasa si tiene tareas
    que necesitan continuar
  5. cuando la actividad no es visible?
    Por ejemplo, descargar archivos,
  6. subir fotos, o reproducir música.
    Para eso, hay un componente de app.
  7. Los servicios.
  8. Ya presentamos actividades,
    proveedores de contenido,
  9. receptores de notificaciones e intentos.
  10. Los servicios son la última pieza del puzle
    de los componentes de aplicación.
  11. Los servicios se inician
    igual que las actividades,
  12. pasando Intent
    a una llamada startService.
  13. Puedes detener servicios
    llamando a stopService
  14. y pasando el nombre del servicio
    que quieres detener.
  15. Los servicios no poseen interfaz
    como las actividades,
  16. y se ejecutan con mayor prioridad
    que las actividades en segundo plano.
  17. Así, es menos probable que
    una app con un servicio en ejecución
  18. la termine el tiempo de ejecución
    para liberar recursos para el primer plano.
  19. Es más, el sistema intentará
    reiniciar los servicios terminados
  20. antes de que sean detenidos
    desde la propia app.
  21. Esto se refleja en este ciclo de vida
    simplificado.
  22. A diferencia de las actividades,
    los servicios están diseñados
  23. para ejecutar tareas largas
    que no deben ser interrumpidas.
  24. Suele bastar con sobrescribir
    el manejador onStartCommand,
  25. que inicia la tarea en segundo plano
    que se quiere ejecutar.
  26. Pero no hay manejadores
    para monitorear cambios de estado
  27. que reflejen el paso de la app
    a segundo plano.
  28. Se debe a que el servicio en ejecución
    manda una señal al marco
  29. de que dé mayor prioridad a esta app
  30. que a otras en segundo plano,
    que no tienen servicios en ejecución.
  31. A veces, tu servicio realizará una tarea
    que, aunque no tenga interfaz,
  32. no se puede interrumpir sin interferir
    con la experiencia del usuario.
  33. Por ejemplo, reproducir música
    o indicar la ruta para el auto.
  34. En estos casos, puedes indicar
    que el servicio ha de tomarse
  35. como si se ejecutara en primer plano,
    llamando a startForeground.
  36. Esta llamada incluye una notificación
    que será visible
  37. y no puede ser descartada hasta
    que el servicio se detenga
  38. o llames a stopForeground.
  39. Más tarde aprenderás con Dan
    más sobre las notificaciones.
  40. Ahora fíjate que un servicio
    en primer plano se ejecuta
  41. con la misma prioridad
    que una actividad en primer plano,
  42. por lo que el tiempo de ejecución
    no puede cerrarlas para liberar recursos.
  43. Tal vez pienses que podrías ahorrarte
    muchos problemas con los ciclos
  44. si creas servicios de larga duración
    o en primer plano.
  45. Yo crecí en la costa de Australia,
  46. y aprendí que nadar a contracorriente
    es agotador y a la larga inútil.
  47. Me refiero a que dificultar
    la gestión de recursos al sistema
  48. lleva a una peor experiencia de usuario.
  49. Nada a favor de la corriente.
  50. Usa servicios en primer plano
    cuando sea absolutamente necesario,
  51. y detén todos los servicios
    lo más rápido posible.
  52. Al igual que las actividades y receptores,
  53. los servicios se ejecutan
    en el hilo principal.
  54. Necesitarás usar un hilo en segundo plano
    o una tarea de respuesta
  55. para ejecutar tareas de larga duración
    dentro de tu servicio.
  56. Más fácil, utiliza la clase IntentService,
  57. que implementa la mejor práctica
    a la hora de usar intentos o intents
  58. que se ejecutan dentro de un servicio.
  59. Crea una cola de intentos por venir,
    que se pasa al llamar a startService.
  60. Luego se procesan de forma secuencial
    en un hilo de ejecución en segundo plano,
  61. dentro del manejador onHandleIntent,
    dentro de IntentService.
  62. Cuando la cola se vacía,
    el servicio se termina por sí solo
  63. hasta que recibe un nuevo intento
    y el proceso comienza otra vez.
  64. Los servicios son excelentes herramientas
    y es importante entender su uso,
  65. pero en la práctica suele haber
    un marco alternativo
  66. para implementar el servicio,
    ya sea IntentService,
  67. para ejecutar tareas en segundo plano,
    o SyncAdapter,
  68. que aprenderás más adelante
    en esta lección,
  69. ideal para sincronizar
    datos en segundo plano.