我正在使用ExoPlayer在Android应用程序中播放媒体。
当您在我的应用中打开视频时,我希望该视频在显示声音的同时又能像其他普通媒体播放器一样播放。
但是,当您关闭应用程序时,我希望音频继续在后台服务中播放,并带有播放,暂停和重新启动内容的通知。
我知道,如果在服务中实例化ExoPlayer,则可以使音频以这种方式运行。但是,为了使视频可见,必须将ExoPlayer实例传递到PlayerView,并且PlayerView必须在UI线程上运行。
如果ExoPlayer实例是在Service中定义的,并且在Service的工作线程上运行,而PlayerView是在Activity中定义的,并且在UI线程上运行,那么如何将ExoPlayer实例传递给PlayerView? AIDL限于基本类型(字符串,长整数,布尔值等),因此似乎不可能。
我希望在关闭应用程序时音频不会停止并重新启动(例如,如果我有两个单独的播放器-一个在Service中,一个在UI线程中)。我希望该服务处理所有媒体下载,解码和音频播放,并且希望以某种方式绑定到该服务以显示从ExoPlayer踢回的解码帧。
答案 0 :(得分:0)
正如我在问题中指出的那样,您无法将ExoPlayer实例同时传递给PlayerView和Service,但是,如果可以通过Singleton访问ExoPlayer实例,则PlayerView和Service都将能够访问它直接使用Singleton的方法。
我遇到的问题是,当我以这种方式创建应用程序时,Singleton(和ExoPlayer实例)位于应用程序的进程空间中,而不是位于前台服务中。因此,当应用程序被终止时,服务将继续运行,但其ExoPlayer实例被破坏(通知仍处于活动状态,但音频被切断了)
我不确定如何将Singleton保留在服务的进程空间中。可能只是确保服务在应用程序访问之前访问Singleton即可。