29

Cómo funcionan las descargas en Android.

8247Puntos

hace 4 años

En Platzi nos preocupamos por los estudiantes, por lo que queríamos ofrecer una mejor experiencia descargando los cursos o clases. Esto condujo a estos tres casos de uso de descarga principales:

  1. Mejores videos ininterrumpidos en Internet.
  2. Reducción del uso de datos móviles.
  3. Ver los materiales sin conexión.

Desde la perspectiva del producto, teníamos muchas preguntas iniciales sobre cómo debería comportarse la función en la app nativa: ¿Cuánta configuración deberíamos ofrecer a los usuarios? ¿Qué estados mostrarle al usuario?

Elegimos una línea de tiempo agresiva para la función, ya que queríamos ofrecer la experiencia a nuestros estudiantes lo antes posible. Nuestro objetivo era crear una gran experiencia con la cantidad justa de alcance para nuestros estudiantes.

¿Cómo funcionan las descargas?

  • Manifiesto de contenido (URL para archivos de audio y video)
  • Tipo de archivo(audio y video con el tipo de formato)
  • Estados de las descargas y red.
  • Metadatos e ilustraciones de nivel de título (en caché en disco)

Mecanismo de descargas

Screenshot_2020-05-15-13-29-50 (1).png

Inicialmente vimos el DownloadManager de Android como el mecanismo para transferir archivos y datos al cliente. Este componente era fácil de usar y manejaba algunas de las funciones que queríamos. Sin embargo, en última instancia, no nos permitió crear la experiencia de usuario que necesitábamos.

Creamos una clase DownloadManager en Platzi por los siguientes motivos:

  • Notificaciones de descarga: muestra el progreso de la descarga en una notificación como un agregado de todos los archivos relacionados con un ‘video descargable’.
  • Pausar / Reanudar descargas: proporciona a los usuarios una forma de detener temporalmente la descarga.
  • Manejo de red: criterios de selección de red dinámica en caso de que el usuario cambie esta preferencia durante una descarga (solo WiFi frente a cualquier conexión).
  • Análisis: comprender los detalles del comportamiento de todos los usuarios y las razones por las que se detuvo una descarga.

Diagrama de funcionamiento de descargas.

Imagen tomada de ExoPlayer.com
  • DownloadService: Envuelve a DownloadManager, reenvía comandos a él. El servicio permite DownloadManager seguir funcionando incluso cuando la aplicación está en segundo plano.
  • DownloadManager: Gestiona múltiples descargas, cargando (y almacenando) sus estados desde (hasta) a DownloadIndex, iniciando y deteniendo descargas en función de requisitos como la conectividad de red, etc. Para descargar el contenido, el administrador generalmente leerá los datos que se descargan a HttpDataSource y los escribirá en a Cache.
  • DownloadIndex: Persiste los estados de las descargas.

Reanudar las descargas cuando se restablezca la conectividad

Encontramos dos problemas principales con JobScheduler. El primero fue cómo proporcionar las actualizaciones que necesitábamos de JobScheduler en dispositivos pre-Lollipop. Para estos dispositivos, escribimos una capa de abstracción sobre la parte superior del componente de programación de trabajos, y en los dispositivos anteriores a Lollipop usamos el receptor de conectividad de red del sistema y el servicio AlarmManager para programar tareas en segundo plano manualmente en horarios establecidos.

El segundo problema principal que encontramos con JobScheduler fue su problema de bloqueo en ciertas circunstancias. Si bien no pudimos solucionar directamente este bloqueo, pudimos determinar una solución alternativa por la cual evitamos llamar a JobService.onJobFinished () por completo en ciertos casos. El trabajo finalmente se agota por sí solo, por lo que el costo de operar de esta manera parecía mejor que permitir que la aplicación se bloquee.

Almacenamiento Descargas

La principal sugerencia que recibimos para Android fue sobre la falta de soporte de la tarjeta SD, que abordamos rápidamente. Ahora hemos establecido una experiencia de referencia para las descargas, Entre ellas están:

  • Podemos seleccionar el tipo de almacenamiento que deseamos en la sección de configuración de la app.
  • Automáticamente detecta cuando un almacenamiento externo es agregado estando la aplicación activa o inactiva.
Screen Shot 2020-05-15 at 3.02.29 PM.png

Reproducción de contenido

Existen varios métodos para reproducir videos en Android, que varían en su complejidad y nivel de control:

Además, la reproducción de contenido fuera de línea (sin transmisión) no es compatible con el reproductor DASH del sistema Android. No era la única opción, pero sentimos que las descargas eran una buena oportunidad para probar el nuevo Android ExoPlayer de Google . Las características que nos gustaron fueron:

  • Soporte para DASH, HLS, Smooth Streaming y fuentes locales.
  • Diseño extremadamente modular, extensible y personalizable.
  • Usado por los proveedores de Google / OEM / SoC como parte de la certificación de Android (va a soporte de dispositivos y fragmentación)
  • Gran documentación y tutoriales.

Conclusión

El equipo mobile se alineó a lanzar esta función bajo una ambiciosa línea de tiempo. Nos produjo satisfacción brindarles alegría a nuestros estudiantes y darles la posibilidad de llevar sus cursos favoritos con ellos mientras viajan o están sin Internet.

Si te gusta ver más blogs de este estilo o tienes dudas cuéntanos en los comentarios. NUNCA PARES DE APRENDER

Paulo
Paulo
DevPaulo

8247Puntos

hace 4 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
3
52290Puntos

Excelentes funcionalidades. Mil gracias.

2
52290Puntos

Gracias @teamplatzi por pensar en nosotros y ser leales a su misión “Nunca parar de aprender” para ofrecernos mejores herramientas cada día.
Me han servido mucho sus mejoras y por esto reto a toda la comunidad Platzi para que probemos las nuevas funcionalidades y califiquemos la APP para que mejoremos su puntaje en la Play Store:
Platzi app.png.

1
229865Puntos

Que bueno que la app sigue mejorando, no la he utilizado, pero voy a probarla y justamente con el taller de design thinking

1
33156Puntos

Excelente, muchas gracias por todo el trabajo que hacen para que la app este mejor.

1
17670Puntos

Genial, por ahora estamos probando

1
11857Puntos

Lo gracioso es que yo había escrito al equipo feedback con muchos puntos que cambiaron y al otro día actualizó. Pareció magia 😃

1
53831Puntos

no me deja descargar los podcast 😦

1
4093Puntos

Increíble que el mismo Team Platzi se dé la tarea de platicarnos cómo es su experiencia en el desarrollo de los productos que utilizamos los estudiantes. Sirve de mucho para una perspectiva fuera de nuestros equipos de trabajo. Ojalá puedan lanzar pronto una versión nativa para iOS. Lo esperaré. Ojalá también se puedan gestionar las suscripciones desde las apps móviles y no sólo desde el navegador.
Gracias por el post, @DevPaulo! 😃

1
13666Puntos

A probar las nuevas funcionalidades

1
37744Puntos

¡buena tigres!

1
701Puntos

Bello espíritu de compartir! ❤️