按下返回键回到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
相关产品推荐
相关产品推荐

