ExoPlayer deja de jugar en segundo plano
Tengo una aplicación que mantiene una instancia global de una instancia de ExoPlayer para facilitar flujos de audio en el fondo. Después de abrir muchas aplicaciones, el audio deja de reproducirse.
Sucede lo siguiente:
- Exoplayer: ¿Cómo reproducir audio a través de auriculares?
- Android - ExoPlayer2 subtítulos
- Caché persistente de MediaPlayer de Android con ExoPlayer
- ExoPlayer: obtiene las canciones metadata de la secuencia HTTP
- Textureview obtener Superficie
- Abrir
Activity
que comienza a reproducir audio - Presione el botón Atrás para cerrar la
Activity
- El audio sigue reproduciéndose y sigue haciéndolo si deja el dispositivo solo (según lo previsto)
Sin embargo, cuando abra una docena o más aplicaciones después del último paso, el ExoPlayer detendrá la reproducción en algún momento. Mi suposición es que una limpieza de la memoria sucede y por lo tanto ExoPlayer consigue deallocated. Traté de obtener más información de los registros, pero que ha proporcionado poca ayuda hasta el momento.
Mantener una referencia de ExoPlayer dentro de un android.app.Service
no hace ninguna diferencia.
El dispositivo en el que estoy probando es un Nexus 5 con Android 5.1.x, pero el problema también ocurre en otros dispositivos.
No pude encontrar una solución en las páginas de documentación de ExoPlayer , ni en StackOverflow ni en Google. ¿Alguien sabe la manera correcta de evitar que el ExoPlayer detenga la reproducción?
- ExoPlayer - reproduce 10 archivos uno tras otro
- Reproducción de vídeo cifrado con ExoPlayer
- ¿Cómo jugar múltiples (máximo de cuatro en mi caso). M3u8 streaming de vídeo en una sola actividad en android?
- Obtención de pantalla en negro cuando se agrega ExoPlayer a GLSurfaceView
- ExoPlayer AudioTrack Tartamudez
- Cómo usar android exoplayer
- Cómo reiniciar el vídeo en Exoplayer después de ExoPlayer.STATE_ENDED
- Cómo mostrar subtítulos en android ExoPlayer
Para asegurarse de que un Service
permanezca vivo lo más posible sin que el sistema lo mate, debe asegurarse de iniciarlo como un servicio de primer plano .
Esto significa que habrá una notificación informando al usuario del servicio activo para que pueda ser consciente de ello. Debido a eso, debe iniciar el servicio con una notificación correspondiente. Aquí está el ejemplo de los documentos:
Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text), System.currentTimeMillis()); Intent notificationIntent = new Intent(this, ExampleActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.setLatestEventInfo(this, getText(R.string.notification_title), getText(R.string.notification_message), pendingIntent); startForeground(ONGOING_NOTIFICATION_ID, notification);