gpt4 book ai didi

android - ExoPlayer2 - 如何从 fragment 中释放

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:54 27 4
gpt4 key购买 nike

我有一个包含 2 个 fragment (不是 ViewPager)的 Activity ,并且想在其中一个 fragment 中使用 ExoPlayer2 来播放内容。初始 fragment 显示内容列表,单击时显示第二个 fragment 以播放所选内容。但是,当我单击返回初始 fragment 时,我仍然可以听到正在播放的内容;好像第二个 fragment 仍然打开。我(试图)以这种方式释放播放器:

@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");
}
}

我读了this但它并没有提供太多的解决方案。另外,阅读几篇文章,其中在 ViewPager fragment 中使用了 ExoPlayer,但不确定这些示例是如何释放播放器的。按照发现的演示应用程序中的 releasePlayer() 方法进行操作 here但没有运气。从 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() 方法,但即使在单击按钮后仍然可以听到播放的内容。

最佳答案

我在 Activity 中使用 ExoPlayer,我使用的是两步过程。 onPause 我正在停止播放:

private SimpleExoPlayer player;     
@Override
protected void onPause() {
super.onPause();

// Pause video if it's playing
if (isVideoPlaying()) {
if (player != null)
player.setPlayWhenReady(false);
}
}

onDestroy 我释放播放器

@Override
protected void onDestroy() {
releasePlayer();
super.onDestroy();
}

private void releasePlayer() {
if (player != null) {
player.stop();
player.release();
player = null;
}
}

关于android - ExoPlayer2 - 如何从 fragment 中释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44935506/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com