ExoPlayer 停止在后台播放
ExoPlayer stops playing in background
我有一个应用程序保留了 ExoPlayer 实例的全局实例,以促进后台的音频流。
打开很多应用程序后,音频停止播放。
情况如下:
- 打开
Activity
开始播放音频
- 按后退按钮关闭
Activity
- 如果您不理会设备(如预期的那样),音频仍在播放并且会继续播放
但是,当您在最后一步后打开十几个或更多应用程序时,ExoPlayer 有时会停止播放。
我的猜测是发生内存清理,因此 ExoPlayer 被释放。我试图从日志中获取更多信息,但到目前为止帮助不大。
在 android.app.Service
中保留对 ExoPlayer 的引用没有什么不同。
我正在测试的设备是 Android 5.1.x 的 Nexus 5,但其他设备也会出现此问题。
我在 ExoPlayer documentation 页面、Whosebug 或 Google 上都找不到解决方案。有谁知道防止ExoPlayer停止播放的正确方法吗?
为了确保 Service
尽可能保持活动状态而不被系统杀死,您需要确保将其作为 foreground service 启动。
这意味着将有一个通知通知用户活动服务,以便他可以知道。因此,您必须使用相应的通知启动服务。这是文档中的示例:
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);
我有一个应用程序保留了 ExoPlayer 实例的全局实例,以促进后台的音频流。 打开很多应用程序后,音频停止播放。
情况如下:
- 打开
Activity
开始播放音频 - 按后退按钮关闭
Activity
- 如果您不理会设备(如预期的那样),音频仍在播放并且会继续播放
但是,当您在最后一步后打开十几个或更多应用程序时,ExoPlayer 有时会停止播放。 我的猜测是发生内存清理,因此 ExoPlayer 被释放。我试图从日志中获取更多信息,但到目前为止帮助不大。
在 android.app.Service
中保留对 ExoPlayer 的引用没有什么不同。
我正在测试的设备是 Android 5.1.x 的 Nexus 5,但其他设备也会出现此问题。
我在 ExoPlayer documentation 页面、Whosebug 或 Google 上都找不到解决方案。有谁知道防止ExoPlayer停止播放的正确方法吗?
为了确保 Service
尽可能保持活动状态而不被系统杀死,您需要确保将其作为 foreground service 启动。
这意味着将有一个通知通知用户活动服务,以便他可以知道。因此,您必须使用相应的通知启动服务。这是文档中的示例:
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);