我有一个包含 2 个片段(不是 ViewPager)的活动,并且想在其中一个片段中使用 ExoPlayer2 来播放内容。初始片段显示内容列表,单击时显示第二个片段以播放所选内容。但是,当我单击返回初始片段时,我仍然可以听到播放的内容;就好像第二个片段仍然打开一样。我(试图)以这种方式释放播放器:
@Override
public void onStop() {
super.onStop();
releasePlayer();
}
public void releasePlayer() {
if (player != null) {
player.setPlayWhenReady(true);
player.stop();
player.release();
player = null;
trackSelector = null;
simpleExoPlayerView.setPlayer(null);
simpleExoPlayerView = null;
System.out.println("releasePlayer");
}
}
我读了这个,但它并没有提供太多的解决方案。此外,阅读几篇在 ViewPager 片段中使用 ExoPlayer 的帖子,但不确定这些示例是如何释放播放器的。遵循此处找到的演示应用程序中的 releasePlayer() 方法,但没有运气。从 onPause()、onDetach()、onDestroyView() 调用 releasePlayer() 但没有区别。
这是在将侦听器添加到播放器后设置的一些日志记录,但看不到任何解释它为什么不释放的东西......
07-05 19:01:07.216 2529-2643/? V/RenderScript: 0xe0494000 Launching thread(s), CPUs 4
07-05 19:01:11.871 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:11.876 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onTimelineChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onLoadingChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onTimelineChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onLoadingChanged...
07-05 19:01:12.467 3064-3064/? V/MediaCodecInfo: Listener-onTimelineChanged...
07-05 19:01:12.468 3064-3064/? V/MediaCodecInfo: Listener-onTimelineChanged...
07-05 19:01:12.515 3064-3099/? V/SoftFFmpegVideo: got OMX_IndexParamPortDefinition, width: 320, height: 180
07-05 19:01:12.708 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:12.708 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:13.380 3064-3064/? V/MediaCodecInfo: Listener-onLoadingChanged...
07-05 19:01:13.655 3064-3064/? V/MediaCodecInfo: Listener-onLoadingChanged...
07-05 19:01:18.528 3064-3099/? V/SoftFFmpegVideo: ~SoftFFmpegVideo
尝试单击按钮但失败
fragmentExoBinding.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
System.out.println("button click");
releasePlayer();
}
});
每次我关闭它时它都会崩溃(使用后按,家庭或最近)b / c不再有播放器。使用 if (player != null) 更新了 releasePlayer() 方法,但即使在单击按钮后仍能听到播放的内容。