You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Exoplayer未加载视频源时点击设置白屏闪退问题如何解决

问题根因

你遇到的崩溃本质是:ExoPlayer的DefaultTrackSelector需要等视频源的媒体元数据加载完成后,才会生成可用的MappingTrackSelector.MappedTrackInfo实例。在未加载完成前直接调用TrackSelectionDialog.createForTrackSelector,方法内部访问空的MappedTrackInfo会抛出未捕获的运行时异常,最终导致APP闪退,表现为白屏后返回首页。

修复方案

1. 点击事件增加状态校验(必须修改)

在触发画质选择弹窗之前,先校验TrackSelector是否已经完成初始化、是否有可用的轨道信息,同时校验ExoPlayer当前状态合法。修改后的点击事件代码如下:

imgAudio.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 先校验核心对象非空,且player未处于未初始化的空闲状态
        if (trackSelector == null || player == null || player.getPlaybackState() == Player.STATE_IDLE) {
            // 可在此处加Toast提示用户"视频正在加载中,请稍后操作"
            return;
        }
        try {
            MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
            // 校验轨道信息非空
            if (mappedTrackInfo == null) {
                // 同样可加操作提示
                return;
            }
            DefaultTrackSelector.Parameters parameters = trackSelector.getParameters();
            TrackSelectionDialog trackSelectionDialog =
                    TrackSelectionDialog.createForTrackSelector(
                            trackSelector,
                            dismissedDialog -> {});
            trackSelectionDialog.show(getSupportFragmentManager(), null);
        } catch (Exception e) {
            // 兜底捕获异常,避免极端情况崩溃
            e.printStackTrace();
        }
    }
});

2. 交互优化(可选,提升用户体验)

视频加载完成前将设置按钮置为不可点击状态,避免用户误触,等ExoPlayer加载完媒体元数据后再恢复点击权限:

  • 初始化/开始加载视频时禁用按钮
imgAudio.setEnabled(false);
imgAudio.setAlpha(0.5f); // 置灰给用户明确的不可点击视觉提示
  • 注册Player状态监听,加载完成后恢复按钮
player.addListener(new Player.Listener() {
    @Override
    public void onPlaybackStateChanged(int playbackState) {
        if (playbackState == Player.STATE_READY) {
            // 媒体元数据加载完成,恢复按钮点击权限
            imgAudio.setEnabled(true);
            imgAudio.setAlpha(1.0f);
        }
    }
});

3. 原XML布局说明

你提供的XML布局无逻辑问题,无需修改:

<ImageView
        android:id="@+id/img_audio"
        app:srcCompat="@drawable/ic_settings_white"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:padding="5dp"/>

问题排查参考截图

问题截图

内容的提问来源于stack exchange,提问作者Sojol Rana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:45:03