You need to enable JavaScript to run this app. 按下返回键回到Activity时VideoView显示空白问题如何修复?
优惠活动
大模型
产品
解决方案
定价
更多

按下返回键回到Activity时VideoView显示空白问题如何修复?

问题修复方案

问题原因

你当前只在onCreate生命周期方法中初始化并启动了视频播放,当跳转至其他Activity时,当前Activity会进入onPause停止状态,VideoView的播放资源会被系统挂起/回收,返回页面时仅执行onResume方法不会重新触发onCreate里的播放逻辑,所以出现空白画面。

修复步骤

  • 第一步:将VideoView改为类成员变量,方便其他生命周期方法调用
  • 第二步:重写onResume方法,页面回到前台时重新启动播放
  • 第三步:可选重写onPause方法,页面不可见时暂停播放节省系统资源

修改后完整Java代码

public class PilihUser extends AppCompatActivity {
    // 声明为类成员变量
    private VideoView videoview;
    // 可选:保存播放进度,返回时续播
    private int playPosition = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pilih_user);

        videoview = findViewById(R.id.videoView);
        Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.test);
        videoview.setVideoURI(uri);
        
        // 可选:设置循环播放
        videoview.setOnPreparedListener(mp -> {
            mp.setLooping(true);
            // 如果有保存的进度,恢复到对应位置
            if (playPosition > 0) {
                mp.seekTo(playPosition);
            }
            mp.start();
        });

        ImageView apin = findViewById(R.id.pilihguru);
        apin.setOnClickListener(view -> {
            Intent intent = new Intent(PilihUser.this, DaftarPembelajaran.class);
            startActivity(intent);
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 页面回到前台时继续播放
        if (videoview != null) {
            videoview.seekTo(playPosition);
            videoview.start();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 页面不可见时暂停播放,保存当前进度
        if (videoview != null && videoview.isPlaying()) {
            playPosition = videoview.getCurrentPosition();
            videoview.pause();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 页面销毁时释放资源
        if (videoview != null) {
            videoview.stopPlayback();
            videoview = null;
        }
    }
}

额外优化建议

如果你的视频存在拉伸变形的问题,可以自定义VideoView重写onMeasure方法适配全屏显示,不需要修改原有布局代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 04:06:07